【问题标题】:Java null pointer exception wont terminate programJava空指针异常不会终止程序
【发布时间】:2011-10-12 18:05:05
【问题描述】:

我的问题很简单。发生异常时如何强制 JAVA 终止我正在编写的程序?

我目前正在使用 Swing,当抛出 NullPointer 异常时,程序继续在后台运行:|以这种方式运行时,我只能从任务管理器中关闭它。不好的是,当我再次运行同一个程序时,会创建第二个实例,我不知道为什么,但是当我有多个同一个程序的实例时,一次我得到空异常,下一次没有,下次是,下次不是……完全随机。

提前致谢!

【问题讨论】:

    标签: java swing nullpointerexception


    【解决方案1】:

    This article 会很感兴趣。捕获异常(理想情况下,您应该消除异常)。

    这个想法是您可以插入一个代理来包装 Swing 事件的调用,并捕获任何结果异常。然后,您可以决定做什么 - 提醒某人、退出等。

    【讨论】:

    • @BrianAgnew 很好的发现。我以为你可以在 Swing 中做类似的事情,但不确定。
    • 是,但在调用 push() 之前需要测试 if (SwingUtilities.isEventDispatchThread()) {,因为此代码将新事件推送到 EDT,而不关心 EDT 中的某些事件是否等待、分发、是否存在
    【解决方案2】:

    显然,您的程序似乎至少有一个错误,您可以尝试使用调试器来解决。

    至于你的问题,如果没有被捕获,异常将终止你的程序。因此,如果你总是抛出异常,包括在 main 方法中,一旦发生就会导致程序退出。

    然而,正如 Mac 在评论中所说的

    Swing 应用程序有一个事件循环。事件循环捕获 Throwable(我相信),因此他无法准确控制以正常方式捕获的内容。

    【讨论】:

    • Swing 应用程序有一个事件循环。事件循环捕获Throwable(我相信),所以他无法准确控制以正常方式捕获的内容。
    • 伟大的@Mac,你为什么不把它作为一个答案。
    • 我知道问题出在哪里,但不知道如何解决。我只是不想让发帖者惊慌失措地想知道他如何将事件循环中的异常传播到他的 main 方法。
    【解决方案3】:

    您应该修复程序中的错误。如果没有被捕获,异常将终止程序,您可能正在捕获异常。你可以随时使用System.exit(0);退出程序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多