2015-05-11 3 views
0

Я учусь строить монитор прогресса для моей программы по ссылке ниже http://www.java2s.com/Tutorial/Java/0240__Swing/ProgressMonitorandSwingworker.htmвыхода происходит перед монитором Прогресса выскакивает

Я понял, что моя программа печатает 1-12 на консоли перед монитором прогресса выскакивает, как показано на скриншоте ниже.

enter image description here

и он будет печатать 2x (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:

Если похоже, что операция займет некоторое время, откроется диалоговое окно прогресса.

 Смежные вопросы

  • Нет связанных вопросов^_^