如果出现异常,如何从其他线程切换回主线程。当在子线程上引发异常时,我希望将通知发送到主线程并从主线程执行方法。我怎么能这样做?
感谢。
其他信息
我从main方法调用一个方法,并在经过一些计算和更改后在那里开始一个新线程
Thread thread = new Thread() {
@Override
public void run() {
.....
}
}
thread.start();
答案 0 :(得分:3)
当子线程发生异常时,主线程将会做什么?对于子线程中的任何错误,它必须等待。
您可以在子线程中建立UncaughtExceptionHandler
,这可能会引发主线程正在等待的事件。
答案 1 :(得分:3)
正如TofuBeer所说,你需要提供更多的背景信息,但是如果你认为这是一个摇摆应用......
SwingUtilities.invokeLater(Runnable r)允许你回调Swing的主执行线程。
} catch (final Exception e) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
//do whatever you want with the exception
}
});
}
答案 2 :(得分:1)
如果你的子线程是在main中创建的,你可能会弹出异常并在主线程上处理它。
你也可以回拨一下。
我没有试过这个我的自我。
答案 3 :(得分:0)
在应用程序的某个类中实现接口http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.UncaughtExceptionHandler.html,让它处理线程及其生成的异常。
有关详细信息,请参阅文档。
编辑:这可能不是你想要的 - 我相信该方法将由刚刚抛出异常的线程调用。如果你想在主线程上执行一些方法(在它的上下文中),主线程必须以某种方式等待它。
但是如果你只想处理一个例子的异常。想到,最好的方法是在线程内的try ... catch块中处理异常。
答案 4 :(得分:-2)
此可能适合您。
public class Main
{
public static void main(final String[] argv)
{
final Main main;
main = new Main();
main.go();
}
public void go()
{
final Runnable runner;
final Thread thread;
runner = new Foo(this);
thread = new Thread(runner);
thread.start();
}
public void callback()
{
System.out.println("hi!");
}
}
class Foo
implements Runnable
{
private final Main main;
Foo(final Main m)
{
main = m;
}
public void run()
{
// try catch and handle the exception - the callback is how you notify main
main.callback();
}
}