线程处理时加载 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()",但没有奏效。我在这个函数中调用加载器类:

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

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

请稍候 JFrame 显示为空白,并在复制文件时保持(根据需要)并在之后消失,但它一直保持空白。

我认为它可能与线程有关,我试图创建一个第二个线程来调用 JFrame,但它不起作用。我的想法快用完了...

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

谢谢

尝试替换

loader.run(); 

 new Thread(loader).start();

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

 loadingFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

你可以用 JDialog 代替 JFrame

最新更新