线程处理时加载JFrame空白

时间:2016-01-19 14:13:08

标签: java swing jframe

我希望在程序复制某些文件时显示“请稍候”JFrame。 上下文:我有一个第一个JFrame,允许用户选择文件,然后单击按钮来触发副本。这是我希望显示“请等待”JFrame并在完成所有操作后使其消失的时间。 我已成功使这个JFrame出现并消失,但它始终是空白的。 “请等待”JFrame的代码:

public class Loader implements Runnable {

    JFrame loadingFrame = new JFrame();

    @Override
    public void run() {

        // Parameters for size and position
        loadingFrame.setSize(180,100);
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JLabel("Please wait ...", SwingConstants.CENTER), "Center");
        loadingFrame.add(panel);
        loadingFrame.setLocationRelativeTo(null);
        loadingFrame.setVisible(true);
        //((JComponent) loadingFrame.getContentPane()).revalidate();
        //loadingFrame.repaint();
    }

    public void destroy() {     
        loadingFrame.setVisible(false);
        loadingFrame.dispose();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Loader());
    }

}

正如你所看到的,我尝试了“repaint()”和“revalidate()”但它没有用。 我在这个函数中调用了Loader类:

public void analyzeAndCopy(){       
        // Show loading Frame
        Loader loader = new Loader();
        loader.run();

        [... copy code...]


        // Hide loading Frame
        loader.destroy();
    }

请等待JFrame显示为空白,并在复制文件时保持(按照需要),然后消失,但它一直保持空白。 :/

我认为它可能与Thread有关,我试图创建第二个线程来调用JFrame,但它没有用。我的想法已经不多了......

任何帮助将不胜感激! :)

由于

1 个答案:

答案 0 :(得分:0)

尝试替换

loader.run(); 

 new Thread(loader).start();

并在方法运行中添加一行:

 loadingFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

您可以使用JDialog而不是JFrame