Swing/ProgressMonitor のバックアップの現在との差分(No.4)
TITLE:ProgressMonitorで処理の進捗を表示
Posted by aterai at 2010-02-15
ProgressMonitorで処理の進捗を表示
ProgressMonitorで処理の進捗を表示します。- category: swing folder: ProgressMonitor title: ProgressMonitorで処理の進捗を表示 tags: [ProgressMonitor, SwingWorker, PropertyChangeListener, JProgressBar] author: aterai pubdate: 2010-02-15T14:18:06+09:00 description: ProgressMonitorで処理の進捗を表示します。 image:
概要
ProgressMonitor
で処理の進捗を表示します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spandel
final ProgressMonitor monitor = new ProgressMonitor(this, "message", "note", 0, 100);
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
ProgressMonitor monitor = new ProgressMonitor(this, "message", "note", 0, 100);
#spanend
monitor.setProgress(0);
worker = new SwingWorker<String, String>() {
@Override public String doInBackground() {
int current = 0;
int lengthOfTask = 120; //list.size();
while(current<lengthOfTask && !isCancelled()) {
//while(current<lengthOfTask && !monitor.isCanceled()) {
while (current < lengthOfTask && !isCancelled()) {
try {
Thread.sleep(50);
}catch(InterruptedException ie) {
} catch (InterruptedException ie) {
return "Interrupted";
}
setProgress(100 * current / lengthOfTask);
publish(current + "/" + lengthOfTask);
current++;
}
return "Done";
}
@Override protected void process(java.util.List<String> chunks) {
for(String message : chunks) {
#spanadd
#spanend
@Override protected void process(List<String> chunks) {
for (String message : chunks) {
monitor.setNote(message);
}
}
#spanadd
#spanend
@Override public void done() {
runButton.setEnabled(true);
monitor.close();
String text = null;
if(isCancelled()) {
if (isCancelled()) {
text = "Cancelled";
}else{
} else {
try {
text = get();
}catch(Exception ex) {
} catch (Exception ex) {
ex.printStackTrace();
text = "Exception";
}
}
//System.out.println(text);
area.append(text+"\n");
// System.out.println(text);
area.append(text + "\n");
area.setCaretPosition(area.getDocument().getLength());
//appendLine(text);
// appendLine(text);
}
};
worker.addPropertyChangeListener(new ProgressListener(monitor));
worker.execute();
解説
上記のサンプルでは、ProgressMonitorを使ってSwingWorkerのタスクの進捗状態を表示しています。解説
上記のサンプルでは、SwingWorker
を使ったタスクの進捗状態をProgressMonitor
で表示しています。
- - PropertyChangeListenerは、TutorialのProgressMonitorDemo.javaを変更して使用しています。
-
ProgressListener
はTutorial
のProgressMonitorDemo.javaを変更して使用
class ProgressListener implements PropertyChangeListener {
private final ProgressMonitor monitor;
public ProgressListener(ProgressMonitor monitor) {
this.monitor = monitor;
this.monitor.setProgress(0);
}
@Override
public void propertyChange(PropertyChangeEvent e) {
#spanadd
#spanend
@Override public void propertyChange(PropertyChangeEvent e) {
Object o = e.getSource();
String strPropertyName = e.getPropertyName();
if("progress".equals(strPropertyName)) {
monitor.setProgress((Integer)e.getNewValue());
if(monitor.isCanceled()) {
((SwingWorker)e.getSource()).cancel(true);
if ("progress".equals(strPropertyName) && o instanceof SwingWorker) {
SwingWorker task = (SwingWorker) o;
monitor.setProgress((Integer) e.getNewValue());
if (monitor.isCanceled() || task.isDone()) {
task.cancel(true);
}
}
}
}
参考リンク
参考リンク
- ProgressMonitor (Java Platform SE 8)
- How to Use Progress Bars (The Java™ Tutorials)
- ProgressMonitorがダイアログを表示するまでの待ち時間
- 処理時間が短くて
ProgressMonitor
が表示されない場合の待ち時間をテスト
- 処理時間が短くて
- [JDK-6445283] ProgressMonitorInputStream not large file aware (>2GB) - Java Bug System