【问题标题】:System.out not working when calling jar-file from Windows command line从 Windows 命令行调用 jar 文件时 System.out 不起作用
【发布时间】:2010-10-31 06:30:08
【问题描述】:

我有这门课:

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,但这没有什么区别。有谁知道我怎样才能做到这一点?

谢谢!

【问题讨论】:

  • 如何从命令行调用jar文件?你看到了什么输出(如果有的话)?很可能 jar 文件没有执行。
  • 我更新了我的问题,更清楚地指出我很确定 jar 文件正在执行并显示我如何调用它。

标签: java eclipse jar executable-jar


【解决方案1】:

您必须使用

运行 JAR
java -jar test.jar

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

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

【讨论】:

  • 我相信这个答案是正确的。仅执行“test.jar”可能会使用“javaw.exe”,它是“java.exe”的无控制台版本,默认情况下与 .jar 文件相关联。
  • JRE 默认安装在 Windows 的 PATH 中,因此“java.exe”应该在之后立即可用。
【解决方案2】:

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

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

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

也检查一下: JAR files revealed

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 2018-07-30
      • 2013-10-27
      • 2013-04-08
      • 2014-01-15
      • 2012-07-09
      • 1970-01-01
      相关资源
      最近更新 更多