gpt4 book ai didi

java - 如何通过 SwingWorker 内部的方法更新进度条

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:52 26 4
gpt4 key购买 nike

我正在尝试更新进度条,但无法执行此操作。我的代码是这样的:

public class MyWorker extends SwingWorker<Void, Void> {

public Void doInBackground(){
howMany=Integer.parseInt(textField.getText());
String result=longMethod(howMany);
label.setText("Hello, you have "+result);
}
}

public class Event implements ActionListener{
public void actionPerformed(ActionEvent e){
label2.setText("Whatever");
button.setEnabled(false);
myWorer.addPropertyChangeListener(this);
myWorker.execute();
}

public void propertyChange(PropertyChangeEvent event){
if("progress".equals(event.getPropertyName())){
int currentPercent = (int)event.getNewValue();
progressBar.setValue(currentPercent);
}
}
}

因此,我无法在 doInBackground 中使用 setProgress,因为更新是由 longMethod() 进行的,该方法包含一个大的慢循环,放置在另一个类中。我做了类似的事情,从该方法将变量传递到包含 JFrame 的类,然后在单击另一个按钮时提供查看进度的可能性。

我不知道是否有某种方法可以使该按钮(或文本字段)每 X 秒刷新一次而无需单击它,或者是否有方法使用 longMethod() 方法中的 setProgress

谢谢!

最佳答案

您需要的是 longMethod 以某种方式返回进度信息。

例如,您可以创建一个简单的接口(interface),您可以将其传递给longMethod,当它知道时,会更新进度...

public interface ProgressMonitor {
/**
* Passes the progress of between 0-1
*/
public void progressUpdated(double progress);
}

然后在您的 doInBackground 方法中,将 ProgressMonitor 的实例传递给 longMethod

public class MyWorker extends SwingWorker<Integer, Integer> {
public Integer doInBackground(){
// It would be better to have obtained this value before
// doInBackground is called, but that's just me...
howMany=Integer.parseInt(textField.getText());
String result=longMethod(howMany, new ProgressMonitor() {
public void progressUpdated(double progress) {
setProgress((int)(progress * 100));
}
});
//label.setText("Hello, you have "+result);
publish(result);
return result;
}

protected void process(List<Integer> chunks) {
label.setText("Hello, you have "+chunks.get(chunks.size() - 1));
}
}

这本质上是 observer pattern 的一个示例

现在,如果您无法修改 longMethod,那么您就无法更新进度,因为您无法知道 longMethod 正在做什么...

关于java - 如何通过 SwingWorker 内部的方法更新进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945292/

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