簡體   English   中英

如何解決Dr Java中的“無法在類路徑或引導類路徑中找到包java.lang”?

[英]How to resolve "unable to find package java.lang in classpath or bootclasspath" in Dr Java?

我是 Java 新手。 我正在參加大學初學者 Java 課程。 我正在運行我的第一個 hello world 代碼並收到一條錯誤消息。 我已經安裝了最新的 Dr. Java 穩定版本並安裝了 Java SE 12 JDK。

我已多次卸載並重新安裝 Dr. Java,但仍然收到錯誤消息。 我也重新編譯了它,但錯誤消息仍然存在。

public class HelloWorld {
    public static void main(String[] args) { 
        System.out.println("Hello, World");
    }
}

我希望代碼輸出在交互窗格下顯示“Hello World”,但事實並非如此,而是出現一條錯誤消息,顯示“當前文檔與交互窗格不同步,應該重新編譯!”。

此外,在控制台窗格下,我收到以下消息:

編譯器正在使用 classPath = '[C:\\Users\\Admin, C:\\Users\\Admin\\Downloads\\drjava-beta-20190813-220051.jar]'; bootClassPath = 'null' 致命錯誤:無法在類路徑或引導類路徑中找到包 java.lang

意識到 OP 通過 JDK 版本解決了他的問題,在遇到他描述的相同症狀后,我遇到了這個問題。 有了這個,即使問題最終與 OP 的情況並不完全“相同”,發布症狀的解決方案似乎也可能是合適的:

我在編譯不起作用時遇到了同樣的問題。 就我而言,我使用的 Linux 系統同時具有 OpenJDK 和手動安裝的 Oracle JDK(從從 java.com 獲得的 tarball 中提取),以及在不同地方的一些其他 JRE 環境。 我“安裝”了DrJava Version : drjava-20190813-220051 jar 文件並從命令行運行它。 然后,當它詢問安裝更新 ( drjava-beta-2019-220051 ) 時,我單擊了[ Manual Download ]

DrJava 報告說我的編譯器是JDK 8.0_222 注意,我不知道那個編譯器來自哪里。 據我所知,我沒有安裝那個版本。 我的 OpenJDK 是:

$ /bin/java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)

我輸入了一個簡單的“Hello World”程序,每次編譯嘗試都會產生:

Compiler Output:
  "Compilation completed."

這是一個錯誤,因為實際上編譯顯然沒有完成。

點擊Run產生:

Interactions
  Welcome to DrJava.  Working directory is /home/krb/Projects/Software/java
  Current document is out of sync with the Interactions Pane and should be recompiled!
  > 

重啟DrJava、保存、點擊Reset等都不能解決問題。

無論如何,在某些時候我注意到控制台選項卡充滿了如下消息:

Console
  Compiler is using classPath = '[/home/krb/Projects/Software/java, /home/apps/drjava/drjava-beta-20190813-220051.jar]';  bootClassPath = 'null'
  Fatal Error: Unable to find package java.lang in classpath or bootclasspath

在這一點上,我嘗試了各種方法,但我專注於將 DrJava 指向我幾天前安裝的 Oracle Java JDK。 我所做的一切都在Edit | Preferences ... | Resource Locations Edit | Preferences ... | Resource Locations Edit | Preferences ... | Resource Locations ,雖然我在那里打了一會兒。 在我開始之前,所有設置都是“空白”的。 無論如何,在我設置后,我最終取得了一些成功:

Web Browser
 /usr/lib64/firefox/firefox
Web Browser Command

Tools.jar Location
  /home/raid/apps/oracle/jdk-1.8.0_251/jre/lib/tools.jar
Display All Compiler Version [ ]
Extra Classpath
  /home/raid/apps/oracle/jdk1.8.0_251/jre/lib
  /home/raid/apps/oracle/jdk1.8.0_251/lib

注意:您的路徑將與我的不同! 您需要使用系統上的實際路徑。 就我而言,我搜索了“rt.jar”和“tools.jar”,它們顯然位於與已安裝 JDK 相關的文件夾中。

在這一點上,我決定嘗試找出讓它工作所需的最低限度。 經過大量擺弄之后,我發現僅設置Preferences | Resource Locations | Tools.jar Location就足夠了Preferences | Resource Locations | Tools.jar Location Preferences | Resource Locations | Tools.jar Location Preferences | Resource Locations | Tools.jar Location ,但有一個主要警告。 您必須使用該對話框瀏覽到該文件。 你不能只是在路徑中粘貼! 如果你只是粘貼路徑,看起來它設置正確,但編譯器將繼續無法工作。 這就是我讓 oracle jdk 編譯器工作的方式。

接下來,我開始考慮是否可以讓 OpenJDK 工作。 我在整個系統中搜索了另一個屬於 OpenJDK 的tools.jar ,但沒有找到。 然后我意識到我沒有安裝 DEVEL OpenJDK 包(在 Mageia Linux 7 上)。

java-1.8.0-openjdk-headless-1.8.0.252-1.b09.1.mga7
java-1.8.0-openjdk-1.8.0.252-1.b09.1.mga7

我安裝了:

java-1.8.0-openjdk-devel-1.8.0.252-1.b09.1.mga7

現在,即使在重置默認值之后,DrJava 也不JDK 8.0_222它正在使用JDK 8.0_222 ,而是JDK 8.0-openjdk-1.8.0.252-1.b09.1.mga7.x86_64-OpenJDK ,並且一切正常, JDK 8.0-openjdk-1.8.0.252-1.b09.1.mga7.x86_64-OpenJDK對首選項進行自定義!

我不知道JDK 8.0_222是從哪里來的。 我的系統上沒有那個版本的東西。 我寧願認為這是 DrJava 中的一些內部事物。 我認為要點是:

  • 如果 DrJava 說它使用JDK 8.0_222 ,它可能不會工作!
  • 如果您的系統可能會拆分 OpenJDK 安裝,請確保您確實安裝了tools.jar
  • Tools.jar Location指向安裝了您正在使用的 JDK 的現有tools.jar文件,並確保瀏覽到它(不僅僅是粘貼到路徑中)。

我知道我看到的是 Linux 和 DrJava 的 .jar 安裝,這可能不是您所擁有的,但也許這些信息將有助於提供您可以查看和嘗試的內容。

正如上面的答案所述,DrJava 與比 Java 8 更新的 Java 版本不兼容。大部分 DrJava 代碼庫是在 Java 的開源版本可行之前很久編寫的。 Sun Microsystems 和 Oracle javac 編譯器是專有的,不能與 DrJava 等開源應用程序一起分發。 因此,DrJava 在 Windows、Mac OS X 和 Linux 上的公共位置搜索 tools.jar(包含 Java 9 之前的 Java JDK 發行版中的編譯器的庫文件)以查找編譯器(更准確地說,2007 年的公共位置是什么) . 如果您從 Java 8 JDK 運行 DrJava,它幾乎總能找到它(盡管對於某些安裝 Amazon Corretto 8 似乎失敗)。 www.cs.rice.edu/~javaplt/drjavarice 上最新可用的 DrJava 版本(2020 年 3 月 3 日)可能會做得更好。 我知道它包含更高版本的開源 Java 8 編譯器(JDK 8.0_242),並且它還在我在 Windows 10 上使用的 Corretto 8 發行版中找到了編譯器(JDK 8.0_265)。開源的神秘版本上面報告的 JDK 編譯器是從 drjava.jar 文件本身檢索的。 既然開源 JDK 包含一個可靠的編譯器(我懷疑它與 Oracle Java 8 SE 編譯器幾乎相同),drjava.jar 文件包含開源 Java 8 編譯器的最新版本。

您的解決方案幫助我解決了 DrJava 無法識別 Mac 上的 Amazon Carretta JDK 的問題。

修復方法是打開 DrJava 並轉到 Edit -> Preferences -> Resource Locations。 從 Tools.jar Location 框中,您必須使用該框末尾的三個點導航到 Mac 上的 tools.jar 文件,該文件可能位於/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home/lib/tools.jar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM