Cha*_*ops 6 java swing exception awt catch-all
我正在javax.swing制作一个应用程序,它从XML Schema(使用JAXFront库)生成表单,并将用户填充的数据存储到XML文档中.
我在需要时放了try-catch-finally块,但是当主线程结束时(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);
}
}
}Run Code Online (Sandbox Code Playgroud)帧类:生成视图和侦听事件
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
}
}Run Code Online (Sandbox Code Playgroud)嗯,问题如下:当从main方法中执行可视化函数时,生成并显示视图.那一刻是我失去了对异常捕捉的控制.然后我的问题是,是否有一些方法来捕获此点后抛出的可能的RuntimeExceptions.
我希望你能理解我的英语,并能回答这个问题.
提前致谢.
dac*_*cwe 23
最简单的版本是设置默认的未捕获异常处理程序:
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
// do something
}
});
Run Code Online (Sandbox Code Playgroud)
但是,这也抓住了程序其他部分抛出的未被捕获的异常.
但是,您可以使用代理仅捕获从swing事件调度线程抛出的运行时异常(有关更多信息,请参阅此页面,从那里复制代码):
class EventQueueProxy extends EventQueue {
protected void dispatchEvent(AWTEvent newEvent) {
try {
super.dispatchEvent(newEvent);
} catch (Throwable t) {
// do something more useful than: t.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在安装它像这样:
Toolkit.getDefaultToolkit().getSystemEventQueue().push(new EventQueueProxy());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4383 次 |
| 最近记录: |