首页 > 解决方案 > 如何解决 Dr Java 中的“无法在类路径或引导类路径中找到包 java.lang”?

问题描述

我是 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' 致命错误:无法在类路径或 bootclasspath 中找到包 java.lang

标签: javadrjava

解决方案


意识到 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)

我输入了一个简单的“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里面,虽然我在那里打了一会儿。在我开始之前,所有设置都是“空白”的。无论如何,在我设置之后,我最终取得了一些成功:

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

注意:您的 PATH 与我的不同!您需要使用系统上的实际路径。就我而言,我搜索了“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

我安装了:

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

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

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


推荐阅读