Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以从Eclipse创建的命令行程序运行吗?_Java_Eclipse_Command Line - Fatal编程技术网

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

Java 我可以从Eclipse创建的命令行程序运行吗?,java,eclipse,command-line,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.NoClassDefFoundE

我使用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)
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)
我还尝试了这个“java-cp/home/roman/workspace/HelloWorld.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)
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)

有人知道我做错了什么吗?提前感谢您的帮助。

可能是您没有正确加载SWT库,导致类无法加载

SWT库是JAR的一部分,这些JAR在运行Eclipse时已经加载,但没有在命令行参数中加载。您是否相应地修改了类路径

这是一篇关于如何在旧版本的Eclipse中执行这类操作的老文章 今天,在最新版本的Eclipse中,您将需要不同的JAR。它甚至可以归结为一个罐子

看看这个网站;至少对于MacCarbon,你可以使用一个罐子,我敢打赌你可以在其他平台上使用


此外,我不能100%确定您是否可以在openJDK下运行Eclipse,这在您的平台上似乎是如此。

这就是问题的原因,因为JVM无法找到HelloWorld类,因为您的类名为HelloWorldSWT,其中包含main方法。试一试


java HelloWorldSWT

转到Debug透视图,选择刚刚运行的程序(在Debug选项卡中右键单击,并选择Properties,您可以看到eclipse启动的整个命令行命令


您可以在eclipse所运行的相同目录(请参阅运行配置、参数、工作目录中的)中运行此相同命令,它将正常工作。

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

假设它是HelloWorldSWT工作区内的
build
目录,并且您的类不在任何包(默认包)中,则该命令应为:

java -cp /home/roman/workspace/HelloWorldSWT/build HelloWorldSWT
或者只需更改到该目录并使用:

java -cp . HelloWorldSWT
编辑:
-cp.
意味着只有实际目录用于查找类文件。您还必须添加程序使用的所有库(JAR或其他目录)(数据库、SWT等)。

有关更多详细信息,请参阅文档:,然后您还没有正确设置类路径

我认为让IDE构建一个包含所有非jre LIB的jar文件并从命令行执行通常更方便

java-jar myprogram.jar

如果用Eclipse编写的程序只能在Eclipse中轻松执行,那么它有什么用途


这确实是一个好问题,java应用程序的部署本身就是一门艺术。编译和执行如果不复杂的话,至少在手工执行时很麻烦。但是Eclipse和Netbeans等其他工具可以帮助您轻松地执行这些任务,甚至可以为您打包程序,以便其他不使用这些工具的人也可以轻松地执行这些程序。

在我看来,您没有一个名为HelloWorldSWT``的类,而是名为
HelloWorldSWT
的包中名为
HelloWorldSWT
的类(您可以在
HelloWorldSWT.java
的第一行找到
包HelloWorldSWT;

如果是这样,进入父目录并键入

java HelloWorldSWT.HelloWorldSWT

这是可行的。

如果你想在Eclipse中运行带有命令行参数的程序,你可以转到run->run Configurations,它将弹出一个窗口,显示你正在运行的程序以及一个可以输入参数的框。

如果你只想看到命令行的一些输出,我找到了另一个快速而肮脏的解决方案是的。但是从长远来看,这不是一个好的做法

  • 删除代码中的包声明(Eclipse会投诉并给您一个红十字,先忽略它),例如
    package hello;

  • 保存

  • 打开命令行并导航到src文件夹(使用cd)

  • 编译java文件,例如
    javac HelloWorld.java

  • 执行java类文件,例如
    java HelloWorld


  • 只要您在正确的目录下,代码中没有任何包声明,它就应该可以工作!包声明确实会引起问题..而Eclipse的设置是为了确保一切正常,所以在那里有包声明是很好的。另一种解决方法是真正自己设置类路径(每次我必须这样做时,这总是让我感到困惑,我很少这样做)。

    为了充分利用Eclipse的便利性,我做了一些变通。下面是我发现的,它对我很有效。希望它能有所帮助:

    谢谢你的回答。我是Java新手,不了解其本质。我的意思是,在没有Eclipse的情况下,我们需要使用一些复杂的方法来运行SWG应用程序,这对我来说很奇怪。如果用Eclipse编写的程序只能在Eclipse中轻松执行,那么它有什么用呢?如果你想在Eclipse中使用一些易于运行的GUI应用程序Java,不使用SWT,而是Swing。如果使用SWT,则必须管理其依赖关系。在创建RCP应用程序时,平台会为您管理这些依赖关系,但如果是标准程序,则必须使用类路径依赖SWT JAR。我尝试了“Java-c”