通过Java中的另一个线程刷新GUI(Swing)
我有一个主程序,其中GUI是基于swing的,并且取决于四种状态之一,GUI元素具有不同的参数。
public class Frame extends JFrame implements Runnable {Status status = 1;
...
@Override
public void run() {
switch (status) {
case 1:
...
case 2:
...
}
public void updateGUI(Status status) {
this.status = status;
SwingUtilities.invokeLater(this);
}
而且,如果我想刷新,GUI只会调用具有适当参数的updateGUI,一切都很好。但是该程序还会创建一个附加线程,该线程在处理相关数据后应更改GUI主程序。不幸的是,我无法在此线程中调用方法updateGUI(..)。
我知道我可以使用invokeLater或SwingWorker进行刷新,但是有10个以上的元素,因此我宁愿使用udpateGUI()方法。
我将不胜感激。
回答:
如果使status
现场线程安全,则可以setStatus
直接从后台线程调用。为了使状态线程安全,请将更改放入同步块,并使变量可变,以便其他线程上的更新可见。
例如
public class Frame extends JFrame implements Runnable {private volatile Status status = 1;
...
@Override
public void run() {
switch (status) {
case 1:
...
case 2:
...
}
public void updateGUI(Status status) {
setStatus(status);
SwingUtilities.invokeLater(this);
}
private synchronized void setStatus(Status status) {
this.status = status;
}
完成这些更改后,可以setStatus
从任何线程进行调用。
以上是 通过Java中的另一个线程刷新GUI(Swing) 的全部内容, 来源链接: utcz.com/qa/416546.html