我想
SwingWorker用a
JProgressBar内追踪我的进度
JDialog。但是,我的
SwingWorker班级无法处理我的自定义
DialogPanel班级。为了获得相同的结果,
ProgressMonitor最好使用默认类。
我已通过构造函数将传递
ProgressMonitor给
SwingWorker:
private final File f;private final ProgressMonitor pmpublic FileLoadWorker(File f, ProgressMonitor pm){ this.f = f; this.pm = pm;}并更改了以下方法:
@Overridepublic void done() { try { pm.setNote(get()); } catch (Exception e) { e.printStackTrace(System.err); System.out.println("error"); }}@Overrideprotected void process(List<String> chunks){ pm.setNote(chunks.get(chunks.size() - 1));}任务
propertyChangeListener更改如下:
final FileLoadWorker worker = new FileLoadWorker(f, pm);worker.addPropertyChangeListener(new PropertyChangeListener(){ @Override public void propertyChange(final PropertyChangeEvent evt) { if("progress".equalsIgnoreCase(evt.getPropertyName())) { pm.setProgress((int) evt.getNewValue()); } if("state".equals(evt.getPropertyName())) { SwingWorker.Statevalue s = (SwingWorker.Statevalue) evt.getNewValue(); if(s.equals(SwingWorker.Statevalue.DONE)) { pm.setProgress(100); pm.close(); Toolkit.getDefaultToolkit().beep(); } } if(pm.isCanceled()) { pm.close(); worker.cancel(true); } }});worker.execute();感谢rashgod提供有关该
state物业的答案和评论。



