Java SWING:随机添加一个JTextField(从未在任何地方使用)会使屏幕变白

|| 我正在使用Eclipse在ubuntu 10.04上进行开发,并且当我在以下代码中添加
JTextField
(我不在任何地方使用或将其设为可见!)时,将窗口而不是显示类似的图像应该是空白。 有人知道这是什么原因吗?
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Testi {
public static void main(String[] args) {
    ImageIcon icon1 = new ImageIcon(\"background.jpg\");
    JFrame frame = new JFrame();
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(700,500);

    JPanel panel = new JPanel();
    panel.setSize(600, 600);
    panel.setOpaque(false);

    frame.setLayout(new FlowLayout(FlowLayout.CENTER));

    JLabel label = new JLabel();
    label.setSize(500, 500);
    label.setIcon(icon1);
    label.setLayout(new FlowLayout(FlowLayout.CENTER));


        // FOLLOWING LINE IS THE PROBLEM: when in code, the screen goes white
    JTextArea text1 = new JTextArea(\"asd\");

    label.add(panel);
    frame.add(label);       
}
}
    
已邀请:
对我有用,这使我认为这是EDT问题。将调用移至
setVisible
到主方法的结尾。 通过此链接:http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html 尽管大多数Swing方法都不安全,但是此方法是线程安全的。  通常可以构造应用程序的GUI并将其显示在主线程中:只要没有实现组件(Swing或其他方式),以下典型代码是安全的:
public class MyApplication {
public static void main(String[] args) {
   JFrame f = new JFrame(\"Labels\");
   // Add components to 
   // the frame here... 
   f.pack(); 
   f.show(); 
   // Don\'t do any more GUI work here... 
   } 
}
上面显示的所有代码都在\“ main \”线程上运行。 f.pack()调用实现JFrame下的组件。从技术上讲,这意味着f.show()调用是不安全的,应在事件分发线程中执行。但是,只要程序还没有可见的GUI,则在f.show()返回之前,JFrame或其内容将不太可能收到paint()调用。因为在f.show()调用之后没有GUI代码,所以所有GUI工作都从主线程移动到事件分发线程,并且前面的代码实际上是线程安全的。     

要回复问题请先登录注册