我的 Java JFrame 项目有一个乏味的问题。
我想要做的(并寻找如何做)是从无ListBox
GUI 类实时添加元素,或者换句话说“异步”,而不冻结我的应用程序。这清楚吗?我试过SwingWorker
和线程但没有结果。我所能做的就是在所有进程完成后更新列表框(显然我的应用程序冻结了,因为我的进程很长)。
这是我的架构:
控制器
package controller;
import business.MyBusiness;
import util.MyLog;
import view.MyView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyController {
MyLog log;
MyBusiness business;
MyView view;
public MyController(){
log = new MyLog();
business = new MyBusiness(log.getLog());
view = new MyView(log.getLog());
}
public void runProcess() {
view.addButtonListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
business.runProcess();
}}
);
}
}
商业
package business;
import MyLog;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.SwingWorker;
public class MyBusiness {
private int counter = 0;
private DefaultListModel<String> model;
private MyLog log;
public MyBusiness(DefaultListModel<String> model) {
this.model = model;a
}
public void runProcess() {
SwingWorker<Void, String> worker = new SwingWorker<Void, String>() {
@Override
protected Void doInBackground() throws Exception {
for (int i = 0; i < 10; i++) {
publish("log message number " + counter++);
Thread.sleep(2000);
}
return null;
}
@Override
protected void process(List<String> chunks) {
// this is called on the Swing event thread
for (String text : chunks) {
model.addElement("");
}
}
};
worker.execute();
}
}
蓝山帝景
哆啦的时光机
相关分类