我观察到以下行为(在Windows 7平台上):
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame{
JPanel p;
JComboBox<String> l;
JLabel title;
public static void main(String[] arg){
Main m = new Main();
m.setVisible(true);
m.setSize(400,400);
m.p = new JPanel();
//m.l = new JComboBox<String>();
m.title = new JLabel("HELLO");
m.p.add(m.title);
m.setContentPane(m.p);
}
}
显示HELLO
,但是如果我取消注释实例化JComboBox
的行,它将不会显示任何内容。可能导致什么?你能重现这个错误吗?
答案 0 :(得分:2)
我的评论解决方案:
最后移动
m.setVisible(true);
。
来自 Jens Schauder的另一条评论 :
您的代码也应该在EDT中运行。还有其他要求 麻烦
可能他想说出这样的话:
处理Swing组件的所有内容,包括构造must run in the EDT。如果没有,它会被打破,尽管你可能没有注意到它。
为此,您可以将逻辑从main方法移动到类的构造函数,并调用构造函数,如下所示:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Main();
}
});
}
你也可以用其他方法编写逻辑然后构造函数。