如何解决Dr Java中的“在类路径或启动类路径中找不到包java.lang”?

时间:2019-08-29 21:21:17

标签: 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");
    }
}

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

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

  

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

3 个答案:

答案 0 :(得分:2)

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

我在编译不起作用时遇到了同样的问题。就我而言,我使用的是一个Linux系统,该系统同时具有OpenJDK和一个手动安装的Oracle JDK(摘自从java.com获得的tarball)以及在其他地方的一些其他JRE环境。我“安装”了DrJava Version : drjava-20190813-220051 jar文件,并从命令行运行了它。然后,当我询问安装更新([ 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

注意:您的路径将与我的路径不同!您需要使用 系统上的实际路径。就我而言,我搜索“ rt.jar”,然后 显然与已安装文件夹有关的“ tools.jar” JDK。

在这一点上,我决定尝试找出使其正常运行所需的最低要求。经过大量的摆弄,我发现仅设置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-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安装,但这可能不是您所拥有的,但是也许这些信息将有助于您进行观察和尝试。

答案 1 :(得分:1)

作为上述答案,DrJava与Java兼容,而不是Java8。大多数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来说似乎失败了)。 DrJava的最新可用版本(2020年3月3日)位于www.cs.rice.edu/~javaplt/drjavarice,可能会做得更好。我知道它包括一个更高版本的开源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编译器的最新版本。

答案 2 :(得分:0)

您的解决方案帮助我解决了DrJava无法识别Mac上的Amazon Carretta JDK的问题。

解决方法是打开DrJava并转到“编辑”->“首选项”->“资源位置”。在Tools.jar位置框中,您必须使用该框末尾的三个点来导航到Mac上的tools.jar文件,该文件可能位于/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home/lib/tools.jar中。

相关问题