我有一个AtomicInteger变量(CurrentCycle),它在一个单独的线程中更新到我的UI线程。我试图在UI线程中根据AtomicInteger的值更新UI字段中的文本字段,而不在UI线程中使用ugle while循环。
我花了几天时间在网上搜索相关查询,但我没有得到任何关于此的信息。我正在寻找最简单的方法来做到这一点。我知道有类似问题的帖子,但我无法使用它们,因为它们太抽象或不同的需求。
我的主要问题是: 1.我是否需要注册一个听众来做这个或者有更简单的方法吗? 2.我在哪里以及如何注册听众?我是否必须设置一个单独的接口类(如果可能,我想避免这种情况)。 你能不能取一些我可以使用的真实例子 - 到目前为止,抽象的解释对我没有帮助!
我已经包含了我的密钥代码(因为该方法尚未被解雇,所以没有做任何事情)。你能提供的Anyhelp将不胜感激。
// MyActivity.java
// Declaration (do I need this?)
AtomicInteger CurrentCycle = new AtomicInteger(0);'
// Method which doesn't appear to be firing when CurrentCycle Changes...
public void setVariableChangeListener(VariableChangeListener variableChangeListener) {
this.variableChangeListener = variableChangeListener;
if ((CurrentCycle != PreviousCycle ) && (this.variableChangeListener !=null)) {
Toast.makeText(getApplicationContext(), "Test - code on variable change is firing.", Toast.LENGTH_SHORT).show();
PreviousCycle=CurrentCycle;
}
答案 0 :(得分:1)
我自己,我只是给我的类一个PropertyChangeSupport字段,给它一个addPropertyChangeListener(...)
和removePropertyChangeListener(...)
方法,只允许在setXxx(...)
方法中更改原子变量,并以相同的方法,触发属性更改事件。我会注意在GUI的事件线程上调用fire事件。请注意,如果您的GUI是Swing GUI,那么如果您使用SwingPropertyChangeSupport,则会为您处理线程问题。
例如,根据我对类似问题的回答here:
public class ServerManager implements Runnable {
public static final String IS_RUNNING = "is running"; // for the Event's name
// if not a Swing app, then use a PropertyChangeSupport field
private SwingPropertyChangeSupport propChngSupport = new SwingPropertyChangeSupport(this);
private volatile boolean isRunning = false;
// other variables
// addPropertyChangeListener(...) {...} goes here
// removePropertyChangeListener(...) {...} goes here
public void setIsRunning(boolean isRunning) {
boolean newValue = isRunning;
boolean oldValue = this.isRunning;
this.isRunning = isRunning;
propChngSupport.firePropertyChange(IS_RUNNING, oldValue, newValue);
}
public void run() {
// ....
}
// other methods
}
至于你的具体问题:
- 我是否需要注册一个监听器来执行此操作,还是有更简单的方法?
我没有看到注册听众的任何困难。
- 我在哪里以及如何注册听众?
观察者将通过调用某种addListenerXxx(...)
类型方法来注册观察者。
- 我是否必须设置一个单独的界面类(如果可能的话,我想避免这种情况)。
如果您使用PropertyChangeListener或Java的Observer / Observable类/接口组合,则不会
- 请问一些我可以使用的真实例子 - 到目前为止,抽象的解释并没有帮助我!
您需要提出比这更具体的问题。