【发布时间】:2014-11-09 12:33:03
【问题描述】:
我已经创建了SwingWorker 实例并将其安排在worker thread(tAccess = new TimeAccess()).execute()) 这个实例中以访问时间。但我需要另一个摆动工作者实例来持续访问数据库。这该怎么做?
// when execute both instances ,sometimes GUI become unresponsive.
tAccess = new TimeAccess()).execute();
dAccess = new DataAccess()).execute();
代码:
public class DataAccess extends SwingWorker<Void, ArrayList<TimeTable>> {
@Override
protected Void doInBackground() throws SQLException, ClassNotFoundException {
int timeRun = 0;
ArrayList<TimeTable> timeList = null;
while (timeRun == 0) {
timeList = TimeTableController.viewTimeTable();
publish(timeList);
}
return null;
}
@Override
protected void process(List<ArrayList<TimeTable>> dataList) {
ArrayList<TimeTable> timeArray = dataList.get(dataList.size() - 1);
DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
int x = 0;
for (TimeTable time : timeArray) {
dtm.setValueAt(time.getCity() + " " + time.getTime(), x, 0);
dtm.setValueAt(time.getCity() + " " + time.getTime(), x, 1);
x = x + 1;
// System.out.println(x);
System.out.println(javax.swing.SwingUtilities.isEventDispatchThread() + "database thread chkr");
}
}
}
private class TimeAccess extends SwingWorker<Void, String> {
@Override
protected Void doInBackground() {
int timeRun = 0;
while (timeRun == 0) {
Calendar cal = Calendar.getInstance();
cal.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
System.out.println(sdf.format(cal.getTime()));
String timeNow = sdf.format(cal.getTime());
publish(timeNow);
}
return null;
}
@Override
protected void process(List<String> timeList) {
String time = timeList.get(timeList.size() - 1);
clockLabel.setText(time);
System.out.println(javax.swing.SwingUtilities.isEventDispatchThread());
}
}
【问题讨论】:
-
在不知道您在员工身上实际做什么的情况下,我们无法为您提供帮助。
-
我刚刚上传了我的 2 个工人班级。
标签: java swing concurrency