2017-09-30 104 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

相關問題