为什么我的线程不工作?

  • 本文关键字:工作 线程 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[] 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);
}
}

代码中有多个错误:

  1. 您正在main方法中执行所有代码。

  2. 您没有遵循 Oracle 命名约定,其中变量名称应采用小驼峰大小写

  3. 您正在手动设置所有组件边界,虽然这似乎是在开始学习 Swing 时制作复杂 GUI 的最佳和最简单的方法,但这不是正确的方法,而是使用布局管理器或它们的组合以及空边框(如果需要间距),Swing 必须在多种屏幕尺寸下工作, PLAF和决议。

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

    似乎您要做的是在一段时间后使用带有自动关闭功能的对话框

  5. 从上面讲,您不想使用Thread而是使用摇摆Timer

    Thread.sleep(...)会使您的程序"冻结"直到完成,而Timer将在自己的线程中执行。

  6. 您没有将程序放在事件调度线程 (EDT) 上

最新更新