Java jar输出。去哪儿了?

时间:2011-03-09 04:39:06

标签: java

我有一个Swing应用程序作为jar文件。

我正在以两种方式启动该应用程序。

  1. 在命令提示符下java -jar app.jar。发射与发射工作正常。

  2. 双击app.jar。按预期启动,但无法正常工作。某处失败了。

  3. 会出现什么问题?

    如果直接运行jar,将打印日志(System.out.println())。

    我有很多sysouts。这会导致问题吗?

    任何人都请在这方面提供帮助。

5 个答案:

答案 0 :(得分:2)

根据Java Doc:http://download.oracle.com/javase/6/docs/api/java/lang/System.html#out

  

“标准”输出流。这个   流已经打开并准备好了   接受输出数据。通常这个   stream对应于显示输出   或另一个输出目的地   由主机环境指定或   用户。

出于记录目的,请使用某些库,例如log4jJava Logging

答案 1 :(得分:1)

如果通过双击运行jar,您将无法看到System.out.println()的输出。您可以从命令行运行程序,其中标准输出它可以控制,也可以将输出写入文件并稍后检查。

我建议使用Apache Log4j进行记录。

答案 2 :(得分:0)

双击jar会调用javaw(java - window模式)来运行jar中manifest.mf中定义的主类,因此,system.out将无法查看。

我建议用一个函数替换System.out.println调用,例如

public static void log(String text)
{
    System.out.println(text);
    // log it to some file
    writeToFile(text);


}

这将确保日志行也将打印到文件,这可用于调试目的。一个注意事项是printStackTrace不会在那里打印!

答案 3 :(得分:0)

我还建议记录(通过我将建议的内容)。

话虽如此,可信任(或“无沙箱”)应用程序可以将System.out重定向到最有用的地方。例如。你可以将它指向ByteArrayOutputStream。当需要结果时,将BAOS的全部内容写入文本区域或您自己的服务器,或者..在任何您喜欢的地方。


当然,记录也可以做同样的事情。我有一些UI,可以将日志消息添加到最终用户可以查看并包含在错误报告中的列表中。可以轻松配置日志记录,以了解详细程度和应用程序的哪些部分。密切关注(通过允许不同类别的不同日志记录级别)。

System.out.print(ln)易于配置以提取特定详细信息。它可能会导致大量无关的输出。

答案 4 :(得分:0)

  

双击app.jar。发射,但是   没有按预期正常工作。   某处失败了。

您是否在清单文件中设置了应用程序的入口点?

PS: - 同时发布双击app.jar时收到的错误消息