Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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
Eclipse生成的可运行jar文件不会执行吗?_Eclipse_Jar_Executable Jar - Fatal编程技术网

Eclipse生成的可运行jar文件不会执行吗?

Eclipse生成的可运行jar文件不会执行吗?,eclipse,jar,executable-jar,Eclipse,Jar,Executable Jar,我使用Eclipse的“导出-->Java-->可运行jar文件”函数生成了一个非常简单的可运行jar文件。我的HelloWorld类如下所示: import javax.swing.JFrame; public class HWorld extends JFrame { public static void main(String[] args) { new HWorld(); } public HWorld() { this.setSize(200, 100);

我使用Eclipse的“导出-->Java-->可运行jar文件”函数生成了一个非常简单的可运行jar文件。我的HelloWorld类如下所示:

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);
  }
}
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: HWorld
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
现在,在生成.jar文件之后,它可以使用命令“java-jar 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.
我的清单如下所示:

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);
  }
}
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: HWorld
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
唯一让我觉得可疑的是(因为.jar不是.class):


寻找想法或想法,甚至是答案!我试图提供尽可能多的信息,希望得到一个高质量的答案。此线程暗示它应该工作,但没有回答我的问题:。其他人可以在Eclipse中尝试吗?

从这个意义上讲,JAR从来都不是“可执行的”。这个罐子的好处是:

java -jar YOURJAR.jar

更新您提供的回溯很奇怪。Windows似乎决定继续使用Java的某个版本启动jar,但将路径名传递给它以代替类名。我不知道这是怎么回事。

在我的机器上卸载所有旧的java版本为我解决了这个问题


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

在我的例子中,由于错误,我没有将包含public static void main()的类声明为public类。在将类声明为public之后,我们能够通过eclipse将下一次导出为runnable jar来解决这个问题


希望这有帮助……

jar包含org.eclipse.jdt.internal.jarinjarloader类,因此它可以这样启动,或者看起来应该这样。(阅读上面的清单文件条目)我对你的答案不太确定,同时我相信你的答案。现在,当我在不使用“java”的情况下执行.jar文件时,解释器是如何运行的?在我看来,它一定在一定程度上起作用了?是的,我明白你的意思。在清单中,我肯定对本地目录使用了“/”,看起来jarinjarloader正在将其转换为绝对路径。如果可能的话,我可能会尝试找到“jarinjarloader”的源代码。因为jarinjarloader是在IBM创建的,所以我尝试下载Eclipse的IBM版本,但它不包含Export runnable jar选项。我开始相信您的说法是正确的,但为什么人们会提到启动.jar文件(如您上面所建议的那样)当java.exe解释器是可执行部分而不是.jar时,作为可执行文件?我觉得我们忽略了一些东西,创建一个自启动的.jar确实是可能的。因为我最初发布了这个问题,现在我使用Maven来做这个.jar操作,而不是尝试用Eclipse来做。