【问题标题】:Java JAR behaving differently to program run out of IDEJava JAR 在 IDE 中运行时表现不同
【发布时间】:2013-07-30 06:26:03
【问题描述】:

好的,所以我一直在 netbeans 中创建一个聊天客户端,我已经完成了。 我决定清理并构建以独立测试它。

但是,当使用套接字从其他程序接收到消息时(连接正常),程序将关闭。直接从 IDE 运行时从未出现此问题。

所以,我想知道的是,一旦程序干净并内置到 jar 中,它的行为是否会有所不同(显然它确实如此,但是如何?)。有什么额外的我必须考虑的。比如例外就意味着一切都会突然停止?

另外,因为它只发生在构建的 jar 中,所以我看不到任何可能发生的异常。我很困惑...

【问题讨论】:

  • 如果您从控制台使用java -jar program.jar 运行它,您可以看到异常报告。
  • 它在编译后不应该有不同的表现。可能是它在某个地方失败了,你确定你看不到任何异常吗?
  • Netbeans 使用您构建的相同 jar 文件。没有变化,是同一个文件。我想知道您是否在 netbeans 中设置了一些运行时参数并在从 cmd 运行时忘记使用它们?
  • 嗯,有一些例外,但不会导致它在 IDE 中崩溃,但我认为对于这个特定位通常不会有任何例外
  • @Jatin 实际上,该应用程序在 NetBeans 中运行时的行为可能会有所不同,就像独立运行一样。例如,在控制台中隐藏密码输入适用于独立,但 NetBeans 不使用标准控制台,并且在使用特定于控制台的方法/类时会崩溃。

标签: java build executable-jar behavior


【解决方案1】:

主要区别在于运行它的目录、您使用的特定 Java 版本以及命令行选项。

其中,最可能导致问题的原因是运行不同版本的 Java。我会检查一下

java -version

与netbeans中的相同。

我还会从命令行运行您的 JAR,以确保您看到产生的异常/错误。

【讨论】:

    【解决方案2】:

    问题可能出在编码上。我的 NetBeans IDE 使用

    启动 jar 文件
    -Dfile.encoding=UTF-8 -Djava.security.policy=applet.policy -classpath -Xmx512M -Xss64M
    

    如您所见,它使用 UTF-8 编码启动 jars。

    【讨论】:

      【解决方案3】:

      不知道你是否找到答案,但问题是我的编码。我正在将一些文件读入 jar,这些文件包含带有土耳其字符的单词。 JAR 文件无法读取这些单词,因此程序行为异常。所以,而不是

      Reader chars = new InputStreamReader(bytes);
      

      我用过

      Reader chars = new InputStreamReader(bytes, "UTF-8");
      

      这解决了我的问题。

      干杯!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多