2015-05-11 38 views
0

我学习到从链路建立一个进度监控我的程序如下 http://www.java2s.com/Tutorial/Java/0240__Swing/ProgressMonitorandSwingworker.htm输出发生之前进度监视器弹出

我在控制台上实现了我的程序打印1-12进度监视器显示弹出之前在下面的截图中。

enter image description here

它会打印出2个(1-16),一旦它的完成。

enter image description here

如何纠正我上面提到的问题是什么?

import java.awt.BorderLayout; 
import java.awt.Insets; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.beans.PropertyChangeEvent; 
import java.beans.PropertyChangeListener; 
import java.util.Random; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.ProgressMonitor; 
import javax.swing.SwingWorker; 

public class ProgressMonitorDemo extends JPanel implements ActionListener, 
PropertyChangeListener { 

    private ProgressMonitor progressMonitor; 
    private JButton startButton; 
    private JTextArea taskOutput; 
    private Task task; 

    class Task extends SwingWorker<Void, Void> { 
     @Override 
     public Void doInBackground() { 
      int progress = 0; 
      setProgress(0); 
      while (progress < 100 && !isCancelled()) 
      { 

       progress += 0; 
       setProgress(Math.min(progress, 100)); 
       System.out.println("1 "); 
       System.out.println("2 "); 
       System.out.println("3 "); 
       System.out.println("4 "); 

       try { 
        Thread.sleep(2000); 
       }catch(InterruptedException ex) { 
        ex.printStackTrace(); 
       } 
       System.out.println("5 "); 
       System.out.println("6 "); 
       System.out.println("7 "); 
       System.out.println("8 "); 

       try { 
        Thread.sleep(2000); 
       }catch(InterruptedException ex) { 
        ex.printStackTrace(); 
       } 
       System.out.println("9 "); 
       System.out.println("10 "); 
       System.out.println("11 "); 
       System.out.println("12 "); 

       progress += 25; 
       setProgress(Math.min(progress, 100)); 

       try { 
        Thread.sleep(2000); 
       }catch(InterruptedException ex) { 
        ex.printStackTrace(); 
       } 

       System.out.println("13 "); 
       System.out.println("14 "); 
       System.out.println("15 "); 
       System.out.println("16 "); 

       try { 
        Thread.sleep(2000); 
       }catch(InterruptedException ex) { 
        ex.printStackTrace(); 
       } 
       progress += 25; 
       setProgress(Math.min(progress, 100)); 
      } 
      return null; 
     } 

     @Override 
     public void done() { 
      Toolkit.getDefaultToolkit().beep(); 
      startButton.setEnabled(true); 
      progressMonitor.setProgress(0); 
     } 

    } 

    public ProgressMonitorDemo() { 
     super(new BorderLayout()); 

     // Create the demo's UI. 
     startButton = new JButton("Start"); 
     startButton.setActionCommand("start"); 
     startButton.addActionListener(this); 

     taskOutput = new JTextArea(5, 20); 
     taskOutput.setMargin(new Insets(5, 5, 5, 5)); 
     taskOutput.setEditable(false); 

     add(startButton, BorderLayout.PAGE_START); 
     add(new JScrollPane(taskOutput), BorderLayout.CENTER); 
     setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); 

    } 


    public void actionPerformed(ActionEvent evt) { 
     task = new Task(); 
     progressMonitor = new ProgressMonitor(ProgressMonitorDemo.this, 
       "Running a Long Task", "", 0, 100); 
     progressMonitor.setProgress(0); 
     //progressMonitor. setMillisToPopup(0); 
     task.addPropertyChangeListener(this); 
     task.execute(); 
     startButton.setEnabled(false); 
    } 


    public void propertyChange(PropertyChangeEvent evt) { 
     String message = " "; 
     if ("progress" == evt.getPropertyName()) { 
      int progress = (Integer) evt.getNewValue(); 
      progressMonitor.setProgress(progress); 
      if(progress == 25) { 
       message = String.format("1", progress); 
      } 
      if(progress == 50) { 
       message = String.format("2", progress); 
      } 

      if(progress == 75) { 
       message = String.format("3", progress); 
      } 

      if(progress == 99) { 
       message = String.format("4", progress); 
      } 


      if(progress == 100) { 
       message = String.format("5", progress); 
      } 

      progressMonitor.setNote(message); 
      taskOutput.append(message); 
      if (progressMonitor.isCanceled() || task.isDone()) { 
       Toolkit.getDefaultToolkit().beep(); 
       if (progressMonitor.isCanceled()) { 
        task.cancel(true); 
        taskOutput.append("Task canceled.\n"); 
       } else { 
        taskOutput.append("Task completed.\n"); 
       } 
       startButton.setEnabled(true); 
      } 
     } 

    } 


    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("ProgressMonitorDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JComponent newContentPane = new ProgressMonitorDemo(); 
     newContentPane.setOpaque(true); 
     frame.setContentPane(newContentPane); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

回答

0

它按设计工作。从Javadoc

如果看起来操作需要一段时间,会弹出进度对话框。