按下按钮后,调用actionPerformed
。像这样开始一个新的Thread
:
public void actionPerformed(ActionEvent evt) {
try {
Runnable r = new Runnable() {
public void run() {
try {
mylabel.setText("new text");
mylabel.revalidate();
mylabel.repaint();
} catch (Exception x) {
x.printStackTrace();
}
}
};
Thread thread = new Thread(r);
thread.start();
MyFunction();
// ...
在myLabel
之后,new text
之前的字符串actionPerformed
没有出现。
答案 0 :(得分:0)
您应该在Event Dispatch Thread(EDT)中运行GUI相关代码。不要创建另一个线程。
public void actionPerformed(ActionEvent evt) {
try {
SwingUtilities.invokeLater(
new Runnable() {
...
如果actionPerformed
是侦听器回调,则它已在EDT上运行。创建另一个
Runnable
如果回调需要很长时间才能执行,或者它会“减慢”GUI。
如果MyFunction()
方法与GUI重绘或类似的方法无关,
在另一个线程上运行它,特别是如果它是资源密集的。