Java SWING:随机添加 JTextField(从未在任何地方使用)使屏幕变白 [英] Java SWING: adding a JTextField (never used anywhere) randomly makes the screen go white

查看:21
本文介绍了Java SWING:随机添加 JTextField(从未在任何地方使用)使屏幕变白的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 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(从未在任何地方使用)使屏幕变白的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆