代码之家  ›  专栏  ›  技术社区  ›  Jordi

从Windows命令行调用JAR文件时System.out不工作

  •  13
  • Jordi  · 技术社区  · 15 年前

    我有这门课:

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

    我还使用了Eclipse的“export to runnable jar”函数将其转换成一个可执行的jar文件(test.jar)。当我在Eclipse中运行这个程序时,它会打印出“HelloWorld!”但是当我从命令行调用JAR文件时,什么也不会发生。

    我试着这样调用jar文件:

    test.jar
    test.jar -jar
    

    没有任何输出。

    我还有另一个程序,它也有一个副作用(除了输出到stdout之外),当副作用被执行时(它告诉我jar文件肯定被执行了),同样没有输出给命令行。我也尝试过使用stderr,但这没什么区别。有人知道我该怎么做吗?

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  32
  •   victor hugo    15 年前

    你必须 运行 罐子的使用

    java -jar test.jar
    

    (必须将JRE的bin文件夹添加到路径中,才能使命令在任何位置工作)

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

        2
  •  8
  •   Billy    15 年前

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

    JAR基本上只是一个存档,您仍然需要Java来实际启动jar(javajar jar)。

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

    也可以看看这个: JAR files revealed

        3
  •  3
  •   Anya Shenanigans    15 年前

    当使用“Test.jar”调用jar时,应用程序的启动被传递给JAR文件的注册Java处理程序,JAR文件不在命令行的上下文中运行。
    默认的JAR处理程序不会打开基于控制台的系统。out,err file handles,因为它将意味着每个启动的JAR文件都有一个cmd样式的窗口,这不是理想的情况。
    前面的答案,使用Java-JavaTest.jar导致它在当前的CMD窗口的上下文中运行,因此您将看到输出。