Java 为什么我的线程不工作?

Java 为什么我的线程不工作?,java,swing,Java,Swing,为什么我的线程不工作 我想在JFrame上短时间显示一条消息。然后我想关闭消息并启动我的主JPanel 我应该把线程放在我的主类之外吗 我在谷歌上搜索了更多……但我没有希望了 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class SwitchCheck { public static void main(String[]

为什么我的线程不工作

我想在
JFrame
上短时间显示一条消息。然后我想关闭消息并启动我的主
JPanel

我应该把线程放在我的主类之外吗

我在谷歌上搜索了更多……但我没有希望了

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class SwitchCheck {

    public static void main(String[] args) {

        final JFrame JF = new JFrame("SwitchJpanel");
        JF.setSize(300, 200);
        JF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Thread Cl = new Thread() {
            public void run() {
                try {
                    JPanel P = new JPanel(null);
                    JF.getContentPane().add(P);
                    JButton L = new JButton("Wellcome");
                    L.setBounds(20, 30, 100, 20);
                    P.add(L);
                    sleep(10000000);
                } catch (Exception e) {

                }
            }
        };
        Cl.start();
        JF.getContentPane().removeAll();
        JF.getContentPane().revalidate();
        final JPanel P1 = new JPanel(null);
        JF.getContentPane().add(P1);
        JLabel L1 = new JLabel("Left");
        L1.setBounds(10, 20, 100, 20);
        P1.add(L1);
        JLabel L2 = new JLabel("Right");
        L2.setBounds(120, 20, 100, 20);
        P1.add(L2);
        final JButton B1 = new JButton("Panel1");
        B1.setBounds(20, 60, 100, 20);
        P1.add(B1);
        final JButton B2 = new JButton("Panel2");
        B2.setBounds(120, 60, 100, 20);
        P1.add(B2);
        B1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                JF.getContentPane().removeAll();
                JPanel P1 = new JPanel(null);
                JF.getContentPane().add(P1);
                JF.getContentPane().revalidate();
                JLabel L1 = new JLabel("Left");
                L1.setBounds(10, 20, 100, 20);
                P1.add(L1);
                JLabel L2 = new JLabel("Right");
                L2.setBounds(120, 20, 100, 20);
                P1.add(L2);
                B1.setText("Panel1");
                B1.setBounds(20, 60, 100, 20);
                P1.add(B1);
                B2.setText("Panel2");
                B2.setBounds(120, 60, 100, 20);
                P1.add(B2);
            }

        });
        B2.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                JF.getContentPane().removeAll();
                JPanel P2 = new JPanel(null);
                JF.getContentPane().add(P2);
                JF.getContentPane().revalidate();

                JLabel L3 = new JLabel("UP");
                L3.setBounds(10, 20, 100, 20);
                P2.add(L3);
                JLabel L4 = new JLabel("Down");
                L4.setBounds(120, 20, 100, 20);
                P2.add(L4);
                B1.setText("Panel3");
                B1.setBounds(20, 60, 100, 20);
                P2.add(B1);
                B2.setText("Panel4");
                B2.setBounds(120, 60, 100, 20);
                P2.add(B2);

            }

        });
        JF.setResizable(false);
        JF.setVisible(true);
    }

}

您的代码中有多个错误:

  • 您正在
    main
    方法中执行所有代码

  • 您没有遵循变量名称应在lowerCamelCase中的位置

  • 您正在手动设置所有组件的边界,虽然这似乎是开始学习Swing时制作复杂GUI的最佳和最简单的方法,但这不是正确的方法,而是使用一个或多个组件的组合,如果需要间距,Swing必须在多个屏幕大小、PLAF和分辨率下工作

  • 我想在JFrame上短时间显示一条消息。然后我想关闭该消息并启动我的主JPanel

    似乎你要做的是在一段时间后使用a和an

  • 从上面的观点来看,您不希望使用
    线程
    ,而是使用一个

    Thread.sleep(…)
    将使程序“冻结”直到完成,而
    计时器将在其自己的线程中执行

  • 你没有把你的程序放在


  • 您的代码中有多个错误:

  • 您正在
    main
    方法中执行所有代码

  • 您没有遵循变量名称应在lowerCamelCase中的位置

  • 您正在手动设置所有组件的边界,虽然这似乎是开始学习Swing时制作复杂GUI的最佳和最简单的方法,但这不是正确的方法,而是使用一个或多个组件的组合,如果需要间距,Swing必须在多个屏幕大小、PLAF和分辨率下工作

  • 我想在JFrame上短时间显示一条消息。然后我想关闭该消息并启动我的主JPanel

    似乎你要做的是在一段时间后使用a和an

  • 从上面的观点来看,您不希望使用
    线程
    ,而是使用一个

    Thread.sleep(…)
    将使程序“冻结”直到完成,而
    计时器将在其自己的线程中执行

  • 你没有把你的程序放在


  • 非常感谢。我不知道秋千计时器。。我现在就用它,而且有效:)谢谢。。我不知道秋千计时器。。我现在用它,而且还能用:)哇