2011-02-02 68 views
4

我使用Eclipse的“导出 - > Java - > Runnable Jar文件”函数生成了一个非常简单的可运行jar文件。我的HelloWorld类看起来是这样的:Eclipse生成的Runnable jar文件不会执行?

import javax.swing.JFrame; 
public class HWorld extends JFrame { 
    public static void main(String[] args) { 
    new HWorld(); 
    } 
    public HWorld() { 
    this.setSize(200, 100); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setTitle("Hello World!"); 
    this.setVisible(true); 
    } 
} 

现在,生成.jar文件后,使用命令“Java的罐子HWorld.jar”

但是,当我尝试运行命令行罚款执行自身的jar(据称应该工作),我收到以下错误,我不知道为什么:

E:\Eclipse\workspace>HWorld.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: E:\Eclipse\workspace\HWorld/jar 
Caused by: java.lang.ClassNotFoundException: E:\Eclipse\workspace\HWorld.jar 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
Could not find the main class: E:\Eclipse\workspace\HWorld.jar. Program will exit. 

我的清单看起来是这样的:

Manifest-Version: 1.0 
Rsrc-Class-Path: ./ 
Class-Path: . 
Rsrc-Main-Class: HWorld 
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader 

,看起来真的很腥我的唯一的事情是这样的(因为一个.jar不是一个.class):

Could not find the main class: E:\Eclipse\workspace\HWorld.jar 

寻找意见或想法,甚至一个答案!我尽可能提供尽可能多的信息,希望得到高质量的答案。这个线程意味着它应该工作,但不回答我的问题:http://forums.oracle.com/forums/thread.jspa?threadID=2152988。任何人都可以在他们的Eclipse中尝试它吗?

+0

因为我最初发布这个问题后,我现在做这个动作的.jar使用Maven而不是试图用Eclipse来完成。 – djangofan 2014-06-06 23:04:17

回答

8

在这个意义上,罐子永远不会'可执行'。什么这个罐子是良好的是:

java -jar YOURJAR.jar 

更新您提供的回溯是奇怪。看起来,Windows决定继续前进,并用一些版本的Java启动你的jar,但传递一个路径名代替类名称。我不知道这个故事是怎么回事。

+0

该jar包含org.eclipse.jdt.internal.jarinjarloader类,因此它可以通过这种方式启动,或者看起来应该是这样。 (阅读上面的清单文件条目) – djangofan 2011-02-02 23:44:00

2

在我的机器上卸载所有较早的java版本修复了我的问题。

在我的最后,我能够使用命令行运行.jar文件,但不能使用默认的双击选项。后来后者再次工作

0

在我的情况下,我错误地没有宣布包含公共静态void main()作为公共类的类。声明类作为公众能够解决此问题的下一个出口为通过Eclipse运行的JAR ...

希望这有助于...