首先关闭。我是Java编程的新手和绿色。
我在运行WindowBuilder和SWT(swt.jar)的Eclipse Kepler 4.3.1(32位)上创建了一个Java Eclipse“SWT”“Application Window”。设计视图是一个复合材料。
Java应用程序在Eclipse中运行良好。我只需按下播放按钮即可。
问题: 发出
java -cp。 PkgNetAccelerator32.netAcceleratorApp
产生以下错误消息:
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Composite
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 6 more
我正在做一些研究,其他几个问题的帖子表明,治愈就是创造一个清单。我看到一篇文章说的话:
我创建了清单文件,并尝试使用以下命令行启动它:
java -jar ../Manifest.jar -cp . PkgNetAccelerator32.netAcceleratorApp
上面产生了相同的错误信息。
我看到另一篇文章说应该在swt.jar文件中添加,但是由清单处理。没有?指定“swt.jar”而不是我创建的清单会导致错误消息:
no main manifest attribute, in ../swt.jar
该错误消息有意义。
我不知所措。如何运行java应用程序?
我正在我的Windows 7 Professional 64位桌面上进行测试,但我也需要在CENTOS上运行。这应该没问题,因为我假设Windows上的任何修复都适用于CENTOS。
更新: 我将两个lib文件放在/ lib文件夹中以匹配给出的答案。然后我发出以下命令行并收到以下错误消息。
C:\SoftDev\Projects\NetAccelerator\JavaWorkspace\NetAccelerator32>java -cp "bin/*;lib/*" PkgNetAccelerator32.netAcceleratorApp
Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
at PkgNetAccelerator32.netAcceleratorApp.open(netAcceleratorApp.java:43)
at PkgNetAccelerator32.netAcceleratorApp.main(netAcceleratorApp.java:33)
我找到了以下article,它产生了一个有效的命令行,这对发送来说是不合理的。我更愿意使用答案。
答案 0 :(得分:1)
让我们假设您有一个类似于此的eclipse项目结构:
Workspace
-> Project
-> src (source code directory)
-> bin (compiled byte code directory as JAR)
-> lib (jar directory)
-> .classpath (eclipse file)
-> .project (eclipse file)
我假设您将JAR导出为可执行JAR。
因此,为了在导出的JAR中使用来自lib目录(swt.jar
)的另一个JAR运行类,而您的工作目录是Project
目录,则需要执行:
java -cp "bin/*:lib/*" PkgNetAccelerator32.netAcceleratorApp
使用通配符需要Java 6或更高版本
请注意:CENTOS要求:作为路径分隔符。 Windows使用分号。
这会将您的类和swt类添加到类路径中并运行您的主类PkgNetAccelerator32.netAcceleratorApp
SWT 32位对比64位
您需要在本地使用32位JVM或继续使用64位JVM并使用64位版本的swt;见swt on windows 64 bit。我建议您将本地JVM(32位或64位)的版本与将在CENTOS计算机上运行的版本相匹配。但是,您需要为CENTOS提供不同的swt jar。