請注意,儘管其他帖子提出了類似問題,但我已經用盡了所有這些帖子中的答案。問題如下:Java App在MacOS上運行,但在Raspberry Pi上運行 - 錯誤:無法找到或加載主類
我開發了一個Java應用程序NetBeans Ver。 8.1上的MacOS Sierra。應用程序從NetBeans IDE和MacOS終端命令行成功運行。在收購Raspberry Pi B +之後,我創建了一個NetBeans項目配置,連接到Raspberry Pi B +,運行Raspbian OS。因此,我現在可以從NetBeans IDE構建並部署到MacOS或Raspberry Pi。 但是,當我嘗試通過IDE或SSH通過終端命令行運行應用程序時,應用程序在Pi上失敗。
Kenwood_520S.jar是應用程序jar文件的名稱,Kenwood_520S是包的名稱,和收發是的類的與公共靜態main()方法的名稱。
從終端命令行執行的命令是:
的java -cp Kenwood_520S.jarKenwood_520S.Transceiver
張貼在IDE的調試窗口和SSH錯誤消息終端在嘗試在Pi上運行應用程序時是相同的,即:
錯誤:未能找到或加載主類Kenwood_520S.Transceiver
我比較了dist目錄和子目錄以及在MacOS(默認配置)和Raspberry Pi B +(Pi配置)上創建的jar文件的內容。這兩個平臺上的目錄,子目錄和jar文件內容是相同的。我張貼下面的詳細信息:
ls dist
Kenwood_520S.jar
README.TXT
lib
ls lib
AbsoluteLayout.jar
commons-lang3-3.5.jar
HawkBridgeFactory.jar
JTransforms-3.1-with-dependencies.jar
swing-layout-1.0.4.jar
jar -tf Kenwood_520S.jar
META-INF/
META-INF/MANIFEST.MF
Kenwood_520S/
Kenwood_520S/AudioConversion$Range.class
Kenwood_520S/AudioConversion.class
Kenwood_520S/Cryptography.class
Kenwood_520S/DateInputVerifier.class
Kenwood_520S/DialogStringEditor.class
Kenwood_520S/DoubleInputVerifier.class
Kenwood_520S/ExceptionWriter.class
Kenwood_520S/FrequencyInputVerifier.class
Kenwood_520S/IntegerInputVerifier.class
Kenwood_520S/Internationalization.class
Kenwood_520S/ModeInputVerifier.class
Kenwood_520S/PowerInputVerifier.class
Kenwood_520S/QRZSearchWebService.class
Kenwood_520S/QSOXML.class
Kenwood_520S/RSTInputVerifier.class
Kenwood_520S/SampleProcessor.class
Kenwood_520S/TimeInputVerifier.class
Kenwood_520S/Transceiver$1.class
Kenwood_520S/Transceiver$10.class
Kenwood_520S/Transceiver$11.class
Kenwood_520S/Transceiver$12.class
Kenwood_520S/Transceiver$13.class
Kenwood_520S/Transceiver$14.class
Kenwood_520S/Transceiver$15.class
Kenwood_520S/Transceiver$16.class
Kenwood_520S/Transceiver$17.class
Kenwood_520S/Transceiver$18.class
Kenwood_520S/Transceiver$19.class
Kenwood_520S/Transceiver$2.class
Kenwood_520S/Transceiver$20.class
Kenwood_520S/Transceiver$21.class
Kenwood_520S/Transceiver$22.class
Kenwood_520S/Transceiver$23.class
Kenwood_520S/Transceiver$24.class
Kenwood_520S/Transceiver$25.class
Kenwood_520S/Transceiver$26.class
Kenwood_520S/Transceiver$27.class
Kenwood_520S/Transceiver$28.class
Kenwood_520S/Transceiver$29.class
Kenwood_520S/Transceiver$3.class
Kenwood_520S/Transceiver$30.class
Kenwood_520S/Transceiver$31.class
Kenwood_520S/Transceiver$32.class
Kenwood_520S/Transceiver$33.class
Kenwood_520S/Transceiver$34.class
Kenwood_520S/Transceiver$35.class
Kenwood_520S/Transceiver$4.class
Kenwood_520S/Transceiver$5.class
Kenwood_520S/Transceiver$6.class
Kenwood_520S/Transceiver$7.class
Kenwood_520S/Transceiver$8.class
Kenwood_520S/Transceiver$9.class
Kenwood_520S/Transceiver.class
Kenwood_520S/WavAudioPulse$PulseLevel.class
Kenwood_520S/WavAudioPulse.class
Kenwood_520S/WavAudioRecorder.class
Kenwood_520S/WavAudioSample.class
Kenwood_520S/WebServiceListener.class
Kenwood_520S/strings.properties
Kenwood_520S/strings_ar_SA.properties
Kenwood_520S/strings_el_GR.properties
Kenwood_520S/strings_en_US.properties
Kenwood_520S/strings_es_ES.properties
Kenwood_520S/strings_it_IT.properties
jar xf Kenwood_520S.jar
cat META-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.4
Created-By: 1.8.0_73-b02 (Oracle Corporation)
Class-Path: lib/swing-layout-1.0.4.jar lib/AbsoluteLayout.jar lib/Hawk
BridgeFactory.jar lib/JTransforms-3.1-with-dependencies.jar lib/commo
ns-lang3-3.5.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: Kenwood_520S.Transceiver
The version of Java on the MacOS is:
java -version
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)
The version of Java on the Raspberry Pi is:
java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)
我懷疑,在行爲的差異是由於環境的差異。 Java版本的差異更多的是一種遙遠的可能性,但可能存在影響行爲的其他環境變量。 (我懷疑CLASSPATH的差異是因爲我明確指出它在-cp命令行參數中的原因。)
請注意:我成功創建了幾個「Hello World」類型的應用程序,這兩個應用程序可以在兩個平臺上運行,和命令行。作爲我調查這個問題的一部分,我做了這件事。我是一位經驗豐富的開發人員,但Java是相對較新的一個。
您的時間和耐心非常感謝。