在Java中,从不同的线程处理JFrame安全吗?

在Java中,从不同的线程处理JFrame安全吗?,java,swing,thread-safety,jframe,Java,Swing,Thread Safety,Jframe,从不同的线程(而不是EDT)调用JFrame的dispose()方法是否安全?否。它可能会工作,也可能会导致问题。只需将该方法包装在SwingUtilities.invokeLater(…)中,不要担心它。不,Swing不是线程安全的。使用类似 Runnable doWorkRunnable = new Runnable() { public void run() { myFrame.dispose(); } }; SwingUtilities.invokeLater(doWorkRun

从不同的线程(而不是EDT)调用JFrame的dispose()方法是否安全?

否。它可能会工作,也可能会导致问题。只需将该方法包装在SwingUtilities.invokeLater(…)中,不要担心它。

不,Swing不是线程安全的。使用类似

Runnable doWorkRunnable = new Runnable() {
    public void run() { myFrame.dispose(); }
};
SwingUtilities.invokeLater(doWorkRunnable);

是的,但是在一个新的runnable中包装一个方法调用似乎很麻烦,不是吗?不管麻烦与否,如果您需要从另一个线程执行gui工作,那么这就是您必须做的事情。调用该方法似乎不太可能是唯一要做的事情。可能还有其他代码以非线程安全的方式运行。(无论如何,真正的h4x0rz将使用
java.beans.EventHandler
)事实上,那里运行的代码可能更危险,但都是使用SwingUtilities调用的。这个dispose方法是从类的另一个方法调用的,我只是想知道是否也需要包装dispose方法,因为它只是“释放”资源,而不是处理其他任何东西。但我猜处理仍然是一种操作,必须使用主线程执行。:)@汤姆·霍丁——我想我不是一个真正的H4x0r。我更喜欢应用程序中的编译时安全性。我想这是从艰苦的学习中得来的。反射是“酷”的,但它也是使应用程序容易崩溃的可靠方法。