从命令行错误的Lauch Eclipse SWT窗口应用程序

时间:2013-12-30 23:39:00

标签: java eclipse jar swt windowbuilder

首先关闭。我是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

我正在做一些研究,其他几个问题的帖子表明,治愈就是创造一个清单。我看到一篇文章说的话:

  • 选择src文件夹,右键单击并选择export,然后选择Java,然后选择JAR文件,指定Manifest.jar和文件夹上的路径,确保选中“生成清单文件”,然后按完成。

我创建了清单文件,并尝试使用以下命令行启动它:

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,它产生了一个有效的命令行,这对发送来说是不合理的。我更愿意使用答案。

1 个答案:

答案 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。