我有一个 Swingworker,这样我的 GUI 可以在我在后台工作时保持响应。
问题是我需要在各个点更新 gui(例如,用程序状态/信息更新标签),但我有很多处理要做,但我无法在一个巨大的 doInBackground 方法中完成所有处理。
因此,我从 doInBackground 方法实例化其他类来执行此操作,问题是除了在此 SW 线程或 EDT 中之外,我无法更新 gui。
注意:为了简洁起见,我删除了不必要的代码
我希望能够从 DoWork1 和 DoWork2 等更新 gui。我尝试传递对 SW swingworker 对象的引用,但无法访问发布方法,可能是因为它受到保护。我也许可以使用反射来更新 gui,但任何使用我的代码的人都不会喜欢这样。我确实听到有人在某处提到过使用反向接口,但没有例子,所以我不知道。
任何帮助将不胜感激,谢谢。
public class SW extends SwingWorker<Object, String> {
private DoWork1 doWork1;
private DoWork2 doWork2;
private Iframe frame;
public SW(Iframe frame, DoWork1 doWork1) {
this.frame = frame;
this.doWork1 = doWork1;
this.doWork2 = new DoWork2();
}
@Override
protected Object doInBackground() {
doWork1.lotsOfWork("");
publish("Can write to label from here");
doWork2.lotsOfWork("", "");
return null;
}
@Override
public void process(List<String> chunks) {
for (String s : chunks) {
frame.getLabel().setText(s);
}
}
@Override
protected final void done() {
}
}
public class DoWork1 {
public DoWork1() {
}
private lotsOfWork(String s) {
//Do lots of work in here
//But need to update the gui with information!
//would like to be able to do something like:
publish("somehow write to label from here!?");
}
}
public class DoWork2 {
public DoWork2() {
}
private lotsOfWork(String s, String s) {
//Do lots more work in here
//But need to update the gui with information!
//would like to be able to do something like:
publish("somehow write to label from here!?");
}
}
在 swingworker 中创建一个名为publishData的公共方法,然后调用受保护的publish方法,并通过变量或接口从其他类DoWork1访问publishData。
这样,在 dobackground 工作方法中实例化的所有类也可以将数据发布到 EDT/GUI。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)