从Windows命令行调用jar文件时,System.out无法正常工作

时间:2009-06-04 09:22:37

标签: java eclipse jar executable-jar

我有这堂课:

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

我使用Eclipse的“Export to runnable JAR”函数将其转换为可执行的jar文件(test.jar)。当我在Eclipse中运行这个程序时,它打印出“Hello World!”,但是当我从命令行调用jar文件时,没有任何反应。

我试过像这样调用jar文件:

test.jar
test.jar -jar

没有任何输出。

我有另一个程序也有副作用(除了输出到stdout)并且正在执行副作用(告诉我jar文件肯定已执行),同样没有给命令输出线。我也尝试过使用stderr,但这没什么区别。有谁知道我怎么做这个工作?

谢谢!

3 个答案:

答案 0 :(得分:32)

您必须使用

运行 JAR
java -jar test.jar

(您的JRE的bin文件夹必须添加到PATH才能从任何位置使命令正常工作)

注意:我知道您使用Eclipse创建了JAR,但您可能想知道how does an executable JAR works

答案 1 :(得分:8)

之前的答案是正确的,所以我只是澄清一下“可执行jar”的概念。 没有“可执行jar”这样的东西,相当于windows中的exe文件,在“可执行jar”中你只会指定“入口”点(你想要默认执行的主类)

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

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

同时检查一下: JAR files revealed

答案 2 :(得分:3)

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