我有一个主程序,其中GUI是基于swing的,并且取决于四种状态之一,GUIhtml" target="_blank">元素具有不同的参数。
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
从任何线程进行调用。
问题内容: 我正在使用SWT编写桌面应用程序。从另一个线程更新GUI控件的最简单方法是什么? 问题答案: 根据需要使用Display.asyncExec或Display.syncExec。 例如,另一个线程可能调用此方法来安全地更新标签: 这里更多
问题内容: 我在Java中的线程上有些挣扎,我有三个线程- 线程1,线程2和线程3。那些启动时正在执行某些任务,我想通过thread1停止这两个线程。我将thread1放在,然后停止两个线程,但是两个线程的进程仍在运行。你有什么想法吗? 问题答案: 您如何试图阻止他们??警告此方法已弃用。 而是考虑对线程1使用某种标志来与线程2和3通信,它们应该停止。实际上,您可能会使用interrupts。 下
问题内容: 我有一个与Java有关的一般性问题。 我正在编写具有GUI菜单的应用程序。我试图根据对单选按钮的选择来更改GUI菜单的一部分。 我需要: 重新绘制整个窗口,或仅使用以下内容更新该部分: 如果我只是使用上面#1中的语句,那么GUI很好-直到将鼠标移到它上面,然后我才看到先前的按钮选择。我究竟做错了什么? 问题答案: Swing组件具有repaint(),revalidate()和doLa
问题内容: 您好,我想知道从swingworkerthread向jtextarea添加文本的最佳方法是什么,我创建了另一个类,Threadsclass()。execute()调用了jbutton。并且线程与此代码并行运行 现在id要做的是将x的值添加到主gui上的文本区域,任何想法都值得赞赏。 问题答案: JavaDocs有一个很好的例子 看一下发布和处理 潜在的意图是,您仅需要从事件调度线程中更
问题内容: 我想更改Android中的UI。 我的主类创建第二个类,然后第二个类调用主类的方法。主类中的方法应更新UI,但程序在运行时会崩溃。 我该怎么办? 我的主要班级: 还有我的第二堂课: 问题答案: 您不能从主线程以外的线程调用UI方法。您应该使用Activity#runOnUiThread()方法。
我做了这段代码,我需要在屏幕上实时显示一些值,所以,我试着这样做,有人知道是怎么回事吗? 安卓显示器: java.lang.NullPointerException:尝试在Android.Widget.TextView.OnMeasure(TextView.java:7520)的Android.View.View.Measure(View.java:19917)的Android.View.View