通过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

回到顶部