gpt4 book ai didi

Java 和 SWT : Threads and Listeners

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:47 26 4
gpt4 key购买 nike

我实际上是 Java 和 SWT 的新手,所以我的问题听起来可能很愚蠢。我查看了 intrnet(和 stackoverflow),但所有答案和示例对于像我这样的菜鸟来说都太复杂了。

我有一个类,称之为 Admin。当我单击一个按钮时,它会启动另一个类(处理程序)中的方法。

  1. 在 Admin 中我有一个进度条,它应该随着在 Handler 中操作。
  2. 我不知道手术需要多少时间Handler 需要,但我知道我有 9 个。
  3. 我想,不知何故,在每个方法完成时通知管理员。

到目前为止我有什么:(省略了不相关的部分)

Admin.java:

ProgressBar bar = new ProgressBar(this, SWT.SMOOTH);
Button btn = new Button(this, SWT.NONE);
btn.setText("Update");
btn.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
btn.setEnabled(false);
thread.start();
}
});
Handler handler = new Handler();
final Thread thread = new Thread(){
public void run() {
handler.run();
for(int i=0; i<=10; i++) {
final int value = i;
try {
Thread.sleep(800);
} catch (Exception e) { }
display.asyncExec(new Runnable(){
public void run() {
bar.setSelection(value);
}
});
}
}
};

处理程序.java:

public class Handler implements Runnable{

void m1() {...}
void m2() {...}
...
void m9() {...}

public void run()
{
m1();
m2();
...
m9();

}

通过这个实现,对 handler.run() 的调用工作正常,进度条正在填充,但当然它们在任何方面都不是“相关的”。

我会欣赏你的智慧!非常感谢!

最佳答案

解决这个问题的高度耦合的方法是让 HandlerProgressBar 作为构造函数的输入,然后在 m1() 完成后,它会将进度更新为 1/9,依此类推。更好(更解耦)的方法是,您可以“监听”Handler,并且 Handler 在每个方法完成后触发一个事件及其进度。然后你可以在 Admin.java 中更新。

关于Java 和 SWT : Threads and Listeners,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14173983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com