问题描述
我正在使用 Eclipse 在 ubuntu 10.04 上进行开发,当我将 JTextField
添加到以下代码中时(我不在任何地方使用,或使其可见!)窗口,而不是像它应该的那样显示图像,变成空白.
I'm developing on ubuntu 10.04 with using Eclipse, and when I add a JTextField
into the following code (that I don't use anywhere, or make visible!) the window, instead of displaying the images like it's supposed to, goes blank.
有人知道这是什么原因造成的吗?
Anyone have any idea what's causing this?
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
的调用移至主方法的末尾.
Works for me, which makes me think it is a EDT issue. Move your call to setVisible
to the end of your main method.
来自此链接: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...
}
}
上面显示的所有代码都在主"线程上运行.f.pack() 调用实现了 JFrame 下的组件.这意味着,从技术上讲, f.show() 调用是不安全的,应该在事件调度线程中执行.但是,只要程序还没有可见的 GUI,JFrame 或其内容在 f.show() 返回之前就不太可能收到paint() 调用.因为在 f.show() 调用之后没有 GUI 代码,所有 GUI 工作都从主线程转移到事件调度线程,而且前面的代码实际上是线程安全的.
这篇关于Java SWING:随机添加 JTextField(从未在任何地方使用)使屏幕变白的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!