【问题标题】:Lauch Eclipse SWT window application from command line error从命令行错误启动 Eclipse SWT 窗口应用程序
【发布时间】:2013-12-30 23:39:00
【问题描述】:

首先。我是 Java 编程的新手和新手。

我在运行 WindowBuilder 和 SWT (swt.jar) 的 Eclipse Kepler 4.3.1(32 位)上创建了一个 Java Eclipse“SWT”“应用程序窗口”。设计视图是一个复合视图。

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 文件夹,右键选择导出,然后选择 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,它生成了一个可以工作的命令行,只是这对于发送来说是不合理的。我更愿意使用答案。

【问题讨论】:

  • 您将classpath (-cp) 指定为.,您的工作目录中有swt.jar 吗?工作目录中有哪些文件?
  • 当前/工作目录是项目的 bin 文件夹的内容。我将两个jar文件放在父文件夹中。 Java 不喜欢将 jar 文件与要运行的文件放在同一文件夹中。
  • 我认为解决方案很简单。我正在尝试从命令行运行我的第一个 Java 应用程序窗口,所以这部分开发过程对我来说是全新的。

标签: java eclipse jar swt windowbuilder


【解决方案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。

因此,当您的工作目录是 Project 目录时,为了在导出的 JAR 中使用 lib 目录 (swt.jar) 中的另一个 JAR 运行一个类,您需要执行:

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。

【讨论】:

  • 克雷格,这让我更接近,只是在 64 位上获得 32 位,不知道这是从哪里来的,因为我的机器上安装了两个 JVM。查看更新的文本问题。
  • 查看我的更新,但是您可能在 PATH 环境变量上有 64 位 JVM,这使得 java 命令自动使用 64 位 JVM。您可以更改您的 PATH 环境变量以指向 32 位 JVM,或者您可以输入 32 位版本的 java 命令的完整路径:例如。 "C:\Program Files (x86)\Java\jdk1.6.0_31\bin\java.exe"
  • CentOS 问题和 Windows OK:Java 不在我的路径中,所以不确定 Java 是从哪里拉出来的,但是使用 32 位命令行的完整路径在我的 Windows 机器上工作就像一个魅力.我的 CENTOS 盒子仍然有问题。我复制了 /bin 和 lib 文件夹。我执行了相同的命令行(只是没有 java 的完整路径)并收到错误“错误:无法找到或加载主类 PkgNetAccelerator32.netAcceleratorApp”。这似乎是缺少 WindowBuilder 的东西或类似的东西。 swt.jar 文件的 Linux 版本位于 lib 文件夹中。
  • 在 CENTOS 上同样的问题。我尝试将 artifacts.jar 和 content.jar 添加到 lib 文件夹中,形成我下载的“WB_v1.6.1_UpdateSite_for_Eclipse4.4.zip”文件。这两个文件与我在 Windows 上使用和引用的文件相同。如前所述,swt.jar 是特定于 CENTOS 机器上的 Linux 的,而 Manifest.jar 是我创建的。这些是现在所有的文件,所以不确定 CENTOS 上的问题是什么。
  • 确保从正确的目录(可能是/bin/lib 的父目录)发出java 命令。如果这不起作用,您能否显示您正在运行的确切命令?
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多