我是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中
答案 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中的一些内部事物。我认为要点是:
JDK 8.0_222
表示它可能不起作用!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
中。