2017-09-30 29 views
0

我试图用以下结构运行程序:通过调用运行使用包在多个文件夹中的java程序

javac gui/XL.java 

哪些成功

+src 
    +gui 
     -XL.java 
     -moreFiles.java 
     +menu 
      -guiFiles.java 
    +util 
     -utilFiles.java 
    +extra 
     -extraFiles.java 

我试图编译代码。 当我试着使用

java gui.XL 

运行的代码中,我得到了以下错误消息:

Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory 
    at gui.XL.<init>(XL.java:25) 
    at gui.XL.main(XL.java:58) 
Caused by: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory 
    ... 2 more 
Caused by: java.lang.ClassNotFoundException: java.lang.invoke.StringConcatFactory 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 2 more 

我想我有一些问题,我的类路径,但我不知道如何解决它的线索。有没有人有什么建议?

+1

您必须将所有.java源文件编译为.class文件,而不仅仅是一个。 – duffymo

+0

这是你安装java 9的Java 9类吗? – Oleg

+0

@duffymo:当我编译所有的.java文件时,我得到了同样的错误。 – RykteT

回答

0

我的问题与classpaths无关,或者我没有使用IDE。我的问题来自于我正在更改'java'命令来运行我的java-openjdk-8,但我的编译器仍然使用java-openjdk-9运行。因此,解决方案是:

sudo update-alternatives --config javaC#Change to java 8 
sudo update-alternatives --config java #Change to java 8 
0

我们现在同意坚持使用JDK 8。您可能不需要尖端的JDK 9功能。您需要知道how to compile all the .java files in a directory at once。我建议您了解命令行选项,该选项告诉JDK在哪里编写.class文件。

您绝对必须了解how CLASSPATH works或者无法编写Java。

你不应该在你的机器上设置CLASSPATH环境变量。在编译和运行时,您应该了解如何每次使用-classpath选项进行正确设置。

你可能会考虑使用IDE。我不想提出这个建议,因为它可能是压倒性的,但JetBrains的IntelliJ是市场上最好的IDE。如果你知道如何使用它,这是一个简单的问题。

+0

我对编程并不陌生,但我对使用classpaths很陌生。我使用下面的代码编译了所有文件:'javac $(find。-name“* .java”)'但它没有区别。我之前使用过IDE,但是我想了解更多关于在安全环境之外进行编程的内容(比如IDE),所以我基本上想了解更多关于类路径的知识。你能给我一些关于如何使用类路径编译和运行程序的建设性提示(因为如果可以避免的话,我不想使用IDE)? – RykteT

+0

我给了你一个描述CLASSPATH如何工作的链接。 – duffymo

+0

我试过使用类路径他们建议的方式,但我不知道要链接到什么目录。我试过(编译后)'java -cp/home/me/path/to/src/gui.XL',但它似乎不起作用。 – RykteT

相关问题