gpt4 book ai didi

java - 在 javax.swing 应用程序中捕获异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:40:17 25 4
gpt4 key购买 nike

我正在使用 javax.swing 制作一个应用程序,该应用程序从 XML 模式(使用 JAXFront 库)生成表单并将用户填写的数据存储到 XML 文档中。

我在需要时放置了 try-catch-finally block ,但是当主线程结束时(AWT 线程仍在运行)捕获异常时我遇到了一点问题。

我有两个类完成主要工作,其他类对问题不重要:

  • 主类:它具有以下结构。初始化应用程序并运行主框架

    public class Main { 
    public static void main(String[] args) {
    readArgs(); // An INI file with the app config
    Model model = initializeElements(args); // My model class
    try {
    MyFrame mfr = new MyFrame(title,model);
    mfr.visualize(); // Assembling view and setting visible
    } catch( Excepion e ) {
    doCleanUp();
    System.exit(-1);
    }
    }
    }
  • Frame Class:生成view和listen事件

    public class MyFrame extends JFrame implements ActionListener,MenuListener { 
    // Some attributes
    // Other mthods without importance
    /**
    * Compose the elements, add listeners and set visible the frame
    */
    public void visualize() {
    generateFormPanel();
    setListeners();
    validate();
    setVisible(true);
    }

    public MyFrame(String title, Modele model) {
    super(title);
    createElementsUsing(model);
    }

    public void actionPerformed(ActionEvent e) {
    // Code to manage events
    }
    }

嗯,问题如下:当从 main 方法执行可视化功能时,将生成并显示 View 。那一刻是我失去对异常捕获的控制的时候。那么我的问题是,如果有一些方法可以捕获在这之后可能抛出的 RuntimeExceptions

我希望你能听懂我的英语并能回答问题。

提前致谢。

最佳答案

最简单的版本是设置默认的未捕获异常处理程序:

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
// do something
}
});

但这也会捕获程序其他部分抛出的未捕获异常。

但是,您可以使用代理仅捕获从 swing 事件调度线程抛出的运行时异常(有关更多信息,请参阅 this 页面,从那里复制代码):

class EventQueueProxy extends EventQueue {

protected void dispatchEvent(AWTEvent newEvent) {
try {
super.dispatchEvent(newEvent);
} catch (Throwable t) {
// do something more useful than: t.printStackTrace();
}
}
}

现在像这样安装它:

Toolkit.getDefaultToolkit().getSystemEventQueue().push(new EventQueueProxy());

关于java - 在 javax.swing 应用程序中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6827646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com