【问题标题】:Frame doesn't show correctly框架无法正确显示
【发布时间】:2016-01-22 10:59:10
【问题描述】:

我做了一个程序,打开一个数据库并进行更新,这个更新很长,我试图制作一个新的框架,用户可以看到更新的状态。

问题是: 当我启动新线程时,窗口的结构被创建但不显示任何其他内容。 更新完成后,窗口完成加载所有内容。

我做错了什么?

public class finestra extends Thread{
    @Override
    public void run(){
        label1.setText(getMissatge1());
        label1.setHorizontalAlignment(JLabel.CENTER);
        label2.setText(getMissatge2());
        label2.setHorizontalAlignment(JLabel.CENTER);
        label3.setHorizontalAlignment(JLabel.RIGHT);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setLayout(new GridLayout(0,1));
        frame.setSize(300, 100);
        frame.add(label1);
        frame.add(label2);
        frame.add(label3);
        //frame.pack();
        frame.setVisible(true);
        int temps = 0;
        boolean ok = false;
        while(ok == false){
            temps++;
            try{
                Thread.sleep(1000);
                label1.setText(getMissatge1());
                label2.setText(getMissatge2());
                label3.setText("Working " + String.valueOf(temps));
            }catch (Exception a){

            }
        }
    }
}

这就是我启动线程的方式:

finestra Finestra = 新的finestra(); Finestra.start();

非常感谢!

【问题讨论】:

    标签: java multithreading jframe


    【解决方案1】:

    您正在尝试在事件调度线程之外进行 gui 更新。不建议这样做,这会导致您看到的行为...

    请参阅How to update java GUI from Thread?,了解有关如何确保在事件调度线程中进行更新的技术。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      相关资源
      最近更新 更多