我们的桌面应用程序有很多用例。并且通常很难再现缺陷并指定如何重现它的所有步骤。
是否可以为所有Swing和SWT事件创建类似Interceptor的东西,并将它们记录到控制台而不在每个actionListener()或视图激活器,菜单贡献者等中放置log.info?
答案 0 :(得分:3)
也许你可以做这样的事情。
public class MyEventQueue extends EventQueue {
private static final Logger logger = Logger.getLogger( MyEventQueue.class.getName() );
@Override
protected void dispatchEvent( AWTEvent newEvent )
{
try {
logger.info("New Event start: "+ newEvent.toString() );
super.dispatchEvent( newEvent );
} catch( RuntimeException e ) {
//log uncatch exceptions in edt
logger.error(e.getCause(),e);
JOptionPane.showMessageDialog( null, "someDescriptiveMessage");
}
}
}
您可以在应用程序启动之前使用辅助方法进行设置。
public static void captureUncaughtExceptionInEvent(){
EventQueue queue = Toolkit.getDefaultToolkit().getSystemEventQueue();
queue.push(new MyEventQueue());
}