首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java运行在MacOS上,但不运行于Raspberry Error:无法找到或加载主类

Java运行在MacOS上,但不运行于Raspberry Error:无法找到或加载主类
EN

Stack Overflow用户
提问于 2017-02-11 18:23:03
回答 1查看 72关注 0票数 1

请注意,虽然其他帖子也提出了类似的问题,但我已经用光了这些帖子中的所有答案。问题如下:

我在NetBeans Ver中开发了一个Java应用程序。8.1 on MacOS .应用程序从NetBeans IDE和MacOS终端命令行成功运行。在获得了一个Raspberry Pi B+之后,我创建了一个NetBeans项目配置,该配置可以连接到运行Raspbian Raspberry Pi B+。因此,我现在可以从MacOS IDE构建并部署到NetBeans或Raspberry。但是,当我试图通过IDE或通过终端命令行通过SSH运行它时,应用程序在Pi上失败。

Kenwood_520S.jar是应用程序jar文件的名称,Kenwood_520S的名称,收发信机是带有公共静态main()方法的的名称。

从终端命令行执行的命令是:

java Kenwood_520S.jar Kenwood_520S.Transceiver -cp

在IDE的调试窗口和SSH终端中发布的错误消息在试图在Pi上运行应用程序时是相同的,即:

错误:找不到或加载主类Kenwood_520S.Transceiver

我比较了dist目录和子目录的内容,以及在MacOS (默认配置)和Raspberry Pi B+ (Pi配置)上创建的jar文件。两个平台上的目录、子目录和jar文件内容是相同的。我张贴以下详细资料:

代码语言:javascript
复制
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命令行参数中显式地指出了它。)

请注意:我成功地创建了几个在两个平台以及IDE和命令行上运行的"Hello“类型的应用程序。这是我调查这个问题的一部分。我是一个经验丰富的开发人员,但Java是一个相对较新的添加。

非常感谢您的时间和耐心。

EN

回答 1

Stack Overflow用户

发布于 2017-02-11 20:46:05

我在这里回答我自己的问题,但不幸的是,对这一问题的起因没有立即的解决办法。此外,尽管我在问题中提供了所有细节,但我没有包括一个基本事实:这个应用程序使用swing并导入javax。

问题中的Java应用程序导入了用于swing的javax。ARM处理器没有javax导入。因此,这个Java swing应用程序运行在Mac上,而不是在Pi上。

理解当前实际问题的关键是使用-verbose开关执行java命令。

当应用程序成功地从MacOS终端命令行运行时,请观察该命令的结果片段。有许多对javax的引用以及成功的load语句。

java -verbose -cp Kenwood_520S.jar Kenwood_520S.Transceiver

从/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/rt.jar加载java.io.FilePermission,从/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/rt.jar加载java.io.FilePermissionCollection,从/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/rt.jar加载java.security.UnresolvedPermission,从文件/User/steffen/Desktop加载Kenwood_520S.WebServiceListener/dist/Kenwood_520S.jar从文件中加载gnu.io.SerialPortEventListener : /Library/Java /Extensions/RXTXComm.jar从/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/rt.jar加载javax.swing.event.CellEditorListener,从加载javax.swing.WindowConstants,从/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/rt.jar 加载javax.accessibility.Accessible,从/Library/Java加载javax.accessibility.Accessible/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/rt.jar ...从file:/Users/steffen/Desktop/dist/Kenwood_520S.jar装载Kenwood_520S.Transceiver ..。从/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/rt.jar加载javax.swing.UnsupportedLookAndFeelException,从/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/rt.jar加载java.text.NumberFormat,从/Library/Java/JavaVirtualMachines/jdk1.8.0_73.jdk/Contents/Home/jre/lib/rt.jar加载javax.swing.JFormattedTextField$AbstractFormatter .从文件://加载Kenwood_520S.CryptographyUsers/steffen/Desktop/dist/Kenwood_520S.jar .从file:/Users/steffen/Desktop/dist/Kenwood_520S.jar加载Kenwood_520S.Transceiver$1,从file:/Users/steffen/Desktop/dist/Kenwood_520S.jar加载Kenwood_520S.Transceiver$3 .

现在,当应用程序在Pi上失败时,查看该命令的结果片段:

java -verbose -cp Kenwood_520S.jar Kenwood_520S.Transceiver

从/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/rt.jar加载java.io.FilePermission,从/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/rt.jar加载java.io.FilePermissionCollection,从/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/rt.jar加载java.security.UnresolvedPermission,从file:/home/pi/NetBeansProjects/Kenwood_520S/dist加载Kenwood_520S.WebServiceListener从/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/rt.jar加载java.util.zip.ZStreamRef,从/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/rt.jar加载java.util.zip.ZipFile$ZipFileInflaterInputStream .从/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/rt.jar 错误加载java.text.Format$Field :无法从/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/lib/rt.jar查找或加载主类Kenwood_520S.Transceiver加载java.lang.Shutdown

Pi的整个详细输出没有对javax的一个引用,因为在Kenwood_520S.Transceiver,中遇到导入时,加载失败!问题不在于文件无法被找到,而在于它不能被加载的

我的下一步是找到一个相当于javax的ARM --如果存在类似的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42179560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档