如何解决Dr Java中“无法在类路径或bootclasspath中找到包java.lang”?

1 java drjava

我是 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

我预计代码输出会在交互窗格下显示“Hello World”,但事实并非如此,而是显示一条错误消息:“当前文档与交互窗格不同步,应重新编译!”。

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

编译器使用 classPath = '[C:\Users\Admin, C:\Users\Admin\Downloads\drjava-beta-20190813-220051.jar]'; bootClassPath = 'null' 致命错误:无法在类路径或 bootclasspath 中找到包 java.lang

kbu*_*ien 5

意识到OP通过JDK版本解决了他的问题,在经历了他描述的相同症状后,我遇到了这个问题。这样,即使问题最终与OP的情况不太“相同”,发布症状的解决方案似乎可能是合适的:

我遇到了同样的问题,编译不起作用。就我而言,我使用的 Linux 系统同时具有 OpenJDK 和手动安装的 Oracle JDK(从 java.com 获得的 tarball 中提取),以及不同位置的其他一些 JRE 环境。我“安装”了DrJava Version : drjava-20190813-220051jar 文件并从命令行运行它。[ Manual Download ]然后,当它询问是否安装更新时,我单击了( drjava-beta-2019-220051)。

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)
Run Code Online (Sandbox Code Playgroud)

我输入了一个简单的“Hello World”程序,每次尝试编译都会产生:

Compiler Output:
  "Compilation completed."
Run Code Online (Sandbox Code Playgroud)

这是一个错误,因为事实上编译显然没有完成。

点击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!
  > 
Run Code Online (Sandbox Code Playgroud)

重新启动 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
Run Code Online (Sandbox Code Playgroud)

此时,我尝试了各种方法,但我专注于将 DrJava 指向我几天前安装的 Oracle Java JDK。我所做的一切都在里面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
Run Code Online (Sandbox Code Playgroud)

注意:您的路径不会与我的相同!您需要使用系统上的实际路径。就我而言,我搜索了“rt.jar”和“tools.jar”,它们显然位于与已安装的 JDK 相关的文件夹中。

此时我决定尝试找出使其正常工作所需的最低限度。经过一番摆弄后,我发现只需设置就足够了Preferences | Resource Locations | Tools.jar Location,但有一个主要警告。您必须使用该对话框浏览到该文件。您不能只是粘贴到路径中! 如果您只是粘贴路径,它可能看起来设置正确,但编译器将继续无法工作。这就是我让oracle jdk编译器工作的方法。

接下来,我开始看看是否可以让 OpenJDK 工作。我在整个系统中搜索了另一个tools.jar属于 OpenJDK 的,但没有找到。然后我意识到我没有安装 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
Run Code Online (Sandbox Code Playgroud)

我安装了:

java-1.8.0-openjdk-devel-1.8.0.252-1.b09.1.mga7
Run Code Online (Sandbox Code Playgroud)

现在,即使在重置默认值之后,DrJava 也不再说它正在使用JDK 8.0_222,而是使用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,它可能不会工作!
  • tools.jar如果您的系统可能会拆分 OpenJDK 安装,请确保您确实安装了OpenJDK。
  • 指向安装了您正在使用的 JDK 的Tools.jar Location现有tools.jar文件,并确保浏览到该文件(而不仅仅是粘贴到路径中)。

我知道我看到的是 Linux 和 DrJava 的 .jar 安装,这可能不是您所拥有的,但也许这些信息将有助于为您提供一些可供查看和尝试的东西。