使用多个文件夹中的包运行java程序

时间:2017-09-30 15:36:40

标签: java classpath

我正在尝试运行具有以下结构的程序:

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

我正在尝试通过调用

来编译代码
javac gui/XL.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

我想我的类路径有一些问题,但我不知道如何修复它。有没有人有任何建议?

2 个答案:

答案 0 :(得分: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。如果您知道如何使用它,这是一个简单的问题。

答案 1 :(得分:0)

我的问题与类路径无关,或者我没有使用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