为什么我的JFrame不更新

为什么我的JFrame不更新

问题描述:

我对这个作品的JFrame的代码,将显示用户在图片的导入时间进度:为什么我的JFrame不更新

public class LoadFrame implements Runnable { 

    JProgressBar progressbar; 
    JPanel loadpanel; 
    MainScreen mainscreen; 
    int progress; 
    JDialog mainloadframe; 

    public LoadFrame(String operation) { 

     mainloadframe = new JDialog(); 
     JLabel operationlabel = new JLabel(operation); 
     progressbar = new JProgressBar(0, 100); 
     loadpanel = new JPanel(); 

     mainloadframe.setSize(300, 75); 
     mainloadframe.setLocationRelativeTo(null); 
     mainloadframe.setLayout(new GridLayout(1, 2)); 
     mainloadframe.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
     mainloadframe.setAlwaysOnTop(true); 
     mainloadframe.setTitle(operation); 
     mainloadframe.setVisible(true); 

     progressbar.setValue(0); 
     progressbar.setStringPainted(true); 
     loadpanel.add(progressbar); 
     loadpanel.add(operationlabel); 
     mainloadframe.add(loadpanel); 

    } 

    public void setMainScreen(MainScreen mainscreen) { 
     this.mainscreen = mainscreen; 
    } 

    public void disposeLoadFrame() { 
     mainloadframe.dispose(); 
    } 

    public void setProgress(int progress) { 
     this.progress = progress; 
    } 

    @Override 
    public void run() { 
     while (progress != 100) { 
      progressbar.setValue(progress); 
     } 
    } 
} 

进步的实际计算还处于完成线程,但出于某种原因,在图像完成导入之前,进度条不会显示在JFrame上。我很确定这是一个线程问题,但我似乎无法弄清楚。一点帮助,将不胜感激。

+0

UI更新调用progressbar.setValue(progress);对EDT的情况发生。从任何其他线程做到这一点是未定义的行为,并导致任何东西从不稳定的绘图,错误的控制弹出各地,正常工作,根本不工作。 – Joey 2013-05-10 14:04:57

  • Runnable#Thread不是start()

  • (后到论坛)必须添加Thread.sleep(int)run(),然后progressbar.setValue(progress); MEST通过使用可运行util.Timer替代地被包裹成invokeLater()

  • #Thread,然后progressbar.setValue(progress); mest被包裹成invokeLater()


  • 使用Swing Timer

  • 正确的方式是从SwingWorker