延迟GUI预加载?-JAVA

延迟GUI预加载?-JAVA,java,swing,Java,Swing,我有一个体育程序,它应该对时间和名称进行排序,然后在GUI上显示它们。但是,GUI是在我实际调用它之前加载的,因此我更新的名称和时间都不会传输到GUI。有没有办法阻止GUI提前加载 这是我用来称呼它的 javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { DisplayGUI.runGUI(); }

我有一个体育程序,它应该对时间和名称进行排序,然后在GUI上显示它们。但是,GUI是在我实际调用它之前加载的,因此我更新的名称和时间都不会传输到GUI。有没有办法阻止GUI提前加载

这是我用来称呼它的

javax.swing.SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            DisplayGUI.runGUI();
        }
    });
这是GUI的实际代码

 import javax.swing.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.*;

    public  class DisplayGUI implements ActionListener{

    JFrame frame;
    JPanel contentPane;
    JComboBox sizeType;
    JLabel sizeListPrompt, convertNew;
    String alpWinner;


    public DisplayGUI(){

        /// Create and setup the frame
        frame = new JFrame("2002 Winter Olympics");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Create a content pane with a BoxLayout and empty borders
        contentPane = new JPanel();
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.PAGE_AXIS));
        contentPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

        // Create a combo box and descriptive label
        sizeListPrompt = new JLabel("Select an event");
        sizeListPrompt.setAlignmentX(JLabel.LEFT_ALIGNMENT);
        contentPane.add(sizeListPrompt);

        String[] names = {"Alpine Skiing", "Bobsleigh", "Curling","Figure Skating",
                "Luge", "Skeleton", "Ski Jumping", "Snowboarding", "Speed Skating", "Super G"};
        sizeType = new JComboBox(names);
        sizeType.setAlignmentX(JComboBox.LEFT_ALIGNMENT);
        sizeType.setSelectedIndex(0);
        sizeType.addActionListener(this);
        contentPane.add(sizeType);

        // create and add a label that will display the Latin names
        convertNew = new JLabel("Gold: \n Silver: \n Bronze: ");
        convertNew.setBorder(BorderFactory.createEmptyBorder(20,10, 10, 10));

        contentPane.add(convertNew);

        //Add a content pane to the frame
        frame.setContentPane(contentPane);

        // size and display the frame
        frame.pack();
        frame.setVisible(true);

    }


    public void actionPerformed(ActionEvent event) {
        JComboBox comboBox = (JComboBox)event.getSource();
        String convertType = (String)comboBox.getSelectedItem();
        AlpineSkiing apski = new AlpineSkiing();
        Bobsleigh bob = new Bobsleigh();
        Curling curl = new Curling();
        FigureSkating fig = new FigureSkating();
        SuperG g = new SuperG();
        Luge l = new Luge();
        Skeleton bones = new Skeleton();
        SkiJumping jump = new SkiJumping();
        Snowboarding board = new Snowboarding();
        SpeedSkating speed = new SpeedSkating();
     //        alpWinner = apski.getWinners();
        String alpwin;
        String bobwin, curlwin, figwin, lugewin, boneswin, jumpwin, boardwin, speedwin, gwin;


        //apski.theWinners = null;
        if (convertType == "Alpine Skiing"){

            //AlpineSkiing.createArray(apski.totalComp, apski.change, apski.counter);
            convertNew.setText("The winners are:" +alpWinner);
        } else if (convertType == "Bobsleigh"){
            convertNew.setText(bob.getWinners());
        } else if (convertType == "Curling"){
            convertNew.setText(curl.getWinners());
        } else if (convertType == "Figure Skating"){
            convertNew.setText(fig.getWinners());
        } else if (convertType == "Luge"){
            convertNew.setText(l.getWinners());
        } else if (convertType == "Skeleton"){
            convertNew.setText(bones.getWinners());
        } else if (convertType == "Ski Jumping"){
            convertNew.setText(jump.getWinners());
        } else if (convertType == "Snowboarding"){
            convertNew.setText(board.getWinners());
        } else if (convertType == "Speed Skating"){
            convertNew.setText(speed.getWinners());
        } else if (convertType == "Super G"){
            convertNew.setText(g.getWinners());
        }

    }
    public static void runGUI(){
        JFrame.setDefaultLookAndFeelDecorated(true);
        DisplayGUI myProgram = new DisplayGUI();
    }
}

我认为您的问题在于比较
convertType
时。要比较内容时,您正在比较引用。要比较内容,请在每个
else if
语句中使用
convertType.equals(“您的字符串”)
,这将解决您的问题。例如,
if(convertType.equals(“高山滑雪”){…}

确实解决了一小部分问题,但解决了主要问题。convertNew.setText(bob.getWinners());在控制台中正常工作后仍在加载null。请尝试调用
frame.revalidate();
然后调用
frame.repaint()
。这将更新GUI。