12

我有这堂课:

public class Test {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

我使用 Eclipse 的“导出到可运行的 JAR”功能将其转换为可执行的 jar 文件(test.jar)。当我在 Eclipse 中运行这个程序时,它会打印出“Hello World!”,但是当我从命令行调用 jar 文件时,什么也没有发生。

我试过这样调用jar文件:

test.jar
test.jar -jar

没有任何输出。

我有另一个程序也有副作用(除了输出到标准输出),当副作用正在执行时(这告诉我 jar 文件肯定已执行),命令行再次没有输出。我也尝试过使用stderr,但这没有什么区别。有谁知道我怎样才能做到这一点?

谢谢!

4

3 回答 3

31

必须使用

java -jar test.jar

(您的 JRE 的 bin 文件夹必须添加到 PATH 才能让命令从任何位置运行)

注意:我知道您使用 Eclipse 创建了 JAR,但您可能想知道可执行JAR是如何工作的

于 2009-06-04T09:44:14.880 回答
9

前面的答案是正确的,所以我将稍微澄清一下“可执行jar”的概念。没有“可执行 jar”之类的东西,相当于 Windows 中的 exe 文件,在“可执行 jar”中,您只需指定“入口”点(默认情况下要执行的主类)

jar 基本上只是一个存档,您仍然需要 java 来实际启动 jar ( java -jar your.jar )

事实上,在 Windows 中您可能与 javaw.exe 有关联,这意味着当您双击 jar 时,操作系统会启动它,就像使用记事本自动打开 .txt 文件一样,它不会生成 .txt一个可执行文件。

也检查一下: JAR 文件显示

于 2009-06-04T10:20:46.663 回答
3

当您使用“test.jar”调用 jar 时,应用程序的启动将移交给已注册的 jar 文件 Java 处理程序,该处理程序不在命令行上下文中运行。
默认的 jar 处理程序不会打开基于控制台的 System.{out,err} 文件句柄,因为这意味着每个启动的 jar 文件都有一个 cmd 样式窗口,这不是理想的情况。
上一个答案,使用 java -jar test.jar 使其在当前 cmd 窗口的上下文中运行,因此您将看到输出。

于 2009-06-04T09:55:30.647 回答