JFrame 显示为空白而不是显示 UI

JFrame appears blank instead of showing UI

我想在一段时间后打开 MainWindow(我创建并添加 UI),但 Java 打开空白的默认 Jframe。如何在闪屏 (Start) 后打开已创建的 window?

public class Start extends JFrame{
        private JPanel panel1;

        public static void main(String[] args) {

            JFrame frame = new JFrame("Starting");
            frame.setContentPane(new Start().panel1);
            frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

            frame.setExtendedState(JFrame.NORMAL);
            frame.setUndecorated(true);
            //frame.setAlwaysOnTop(true);
            frame.setVisible(true);

            /*Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
            frame.setLocation(dim.width/2-frame.getSize().width/2, dim.height/2-frame.getSize().height/2);*/

            frame.toFront();
            frame.pack();

            frame.setLocationRelativeTo(null);

            Timer timer = new Timer(1000, new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {

                    new MainWindows().setVisible(true);
                    frame.setVisible(false);

                    //System.exit(0);
                }
            });

            timer.start();

        }

MainWindows.java

public class MainWindows extends JFrame{

    private JPanel panel;



    public static void main(String[] args)
    {

        boolean clicked = false;


        JOptionPane.showConfirmDialog(null, "Це перша вершія гри. Будь ласка, закрийте всі програми, щоб уникнути помилок.", "Увага!", JOptionPane.YES_OPTION);


        JFrame frame2 = new JFrame("Flying");
        frame2.setContentPane(new MainWindows().panel);
        frame2.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        frame2.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame2.setUndecorated(true);
        frame2.setAlwaysOnTop(true);
        frame2.setVisible(true);

        frame2.toFront();
        frame2.pack();

您的 MainWindow class 有一个从未被调用的静态 main 方法。它看起来很像那里的代码应该进入构造函数。

您的程序中似乎有两个主要方法。我建议从 MainWindows.java 中删除 main 方法并将代码从它移到 MainWindows 构造函数中。这将确保当您初始化新的 MainWindows() 对象时,新 JFrame 中的所有内容都应该正确设置。

MainWindows.java中的代码:

    public MainWindows()
{

    boolean clicked = false;


    JOptionPane.showConfirmDialog(null, "Це перша вершія гри. Будь ласка, закрийте всі програми, щоб уникнути помилок.", "Увага!", JOptionPane.YES_OPTION);


    JFrame frame2 = new JFrame("Flying");
    frame2.setContentPane(new MainWindows().panel);
    frame2.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

    frame2.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame2.setUndecorated(true);
    frame2.setAlwaysOnTop(true);
    frame2.setVisible(true);

    frame2.toFront();
    frame2.pack();

我终于修好了。 frame2.setContentPane(panel);谢谢大家的回答!