我可以从Eclipse创建的命令行程序运行吗?

Rom*_*man 28 java eclipse command-line

使用Eclipse我创建了一个SWT Hello World程序.我能够从Eclipse运行这个程序,它工作正常.

在"/ home/myname/workspace/HelloWorldSWT"中,我找到了两个文件:HelloWorldSWT.java和HelloWorldSWT.class.我想从命令行执行相应的程序.首先我尝试输入"java HelloWorld",我收到以下错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
   at gnu.java.lang.MainThread.run(libgcj.so.90)
Caused by: java.lang.ClassNotFoundException: HelloWorld not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(libgcj.so.90)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at gnu.java.lang.MainThread.run(libgcj.so.90)
Run Code Online (Sandbox Code Playgroud)

我也试过这个"java -cp/home/roman/workspace/HelloWorld.HelloWorld".结果我收到以下错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: loaded class HelloWorld.HelloWorld was in fact named HelloWorld
   at java.lang.VMClassLoader.defineClass(libgcj.so.90)
   at java.lang.ClassLoader.defineClass(libgcj.so.90)
   at java.security.SecureClassLoader.defineClass(libgcj.so.90)
   at java.net.URLClassLoader.findClass(libgcj.so.90)
   at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at java.lang.ClassLoader.loadClass(libgcj.so.90)
   at gnu.java.lang.MainThread.run(libgcj.so.90)
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?预先感谢您的任何帮助.

Per*_*ium 69

转到Debug透视图,选择刚刚运行的程序(在Debug选项卡中显示Terminated,退出值...)右键单击,然后选择Properties,在那里你可以看到eclipse启动的整个命令行命令.

你可以在eclipse所做的同一个目录中运行同样的命令(参见运行配置,参数,工作目录),它会起作用.


use*_*421 7

您必须在类路径中添加eclipse存储HelloWorldSWT.class文件的目录.它是在创建项目时定义的,如"bin","build"或"classes".检查项目属性或搜索HelloWorldSWT.class文件.

假设它是buildHelloWorldSWT工作空间内的目录,并且您的类没有包(默认包),该命令应该是:

java -cp /home/roman/workspace/HelloWorldSWT/build HelloWorldSWT
Run Code Online (Sandbox Code Playgroud)

或者只是更改到该目录并使用:

java -cp . HelloWorldSWT
Run Code Online (Sandbox Code Playgroud)

编辑:
-cp .只有实际目录用于寻找类文件的手段.您还必须添加程序使用的所有库(JAR或其他目录)(数据库,SWT,...).
有关更多详细信息,您可以查看文档:如何找到类,设置类路径Java命令


Uri*_*Uri 2

您可能没有正确加载 SWT 库,因此您的类无法加载。

SWT 库是运行 Eclipse 时已加载但未在命令行参数中加载的 jar 的一部分。您是否相应地修改了类路径?

这是一篇关于如何在旧版本的 Eclipse 中执行此类操作的旧文章 http://www.ibm.com/developerworks/opensource/library/os-ecgui1/ 今天,您将需要使用最新版本的 Eclipse 的不同 jar。它甚至可能归结为一个罐子。

查看SWT 常见问题解答;至少对于 Mac Carbon,你可以使用单个 jar,我敢打赌你也可以在其他平台上这样做。

另外,我不能 100% 确定您可以在 openJDK 下运行 Eclipse,在您的平台上似乎就是这种情况。