添加图像时JFrame不起作用

时间:2017-05-07 21:55:32

标签: java eclipse swing

我遇到的问题似乎有些奇怪。当我添加一个新的ImageIcon并尝试运行该程序时,它只是给我一个灰色的屏幕,没有添加任何对象。

    ImageIcon icon = new ImageIcon(getClass.getResource("zippo.jpg"));

但如果删除该行:

a

然后它完美无缺。 我没有收到任何错误消息,我一直在寻找,但我只能发现问题可能与gridbaglayout有关。

我如何解决它或者我必须改变布局? (这只是一个基于原始代码的简单代码作为示例,因此任何不包括必须更改布局的解决方案都非常受欢迎)

2 个答案:

答案 0 :(得分:1)

如果在窗口调整大小或最小化/最大化后正确绘制某些内容,那么这是竞争条件的确定标志,因为您没有在事件调度程序线程上启动GUI。你的主要问题是你在早期调用setVisible()方法,在你将所有组件添加到顶级容器之前不要调用setVisible()。另一个问题是您没有在事件调度程序线程上启动GUI。请参阅固定代码中的主要方法:

public class Ctester {
    public Ctester() {
        Frame();
    }

    public void Frame() {
        JFrame fr = new JFrame();
        fr.setSize(500, 500);
        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.setResizable(false);

        JPanel p = new JPanel(new GridBagLayout());

        JLabel l = new JLabel("label");
        JButton bm1 = new JButton("hellu");

        p.add(l);
        p.add(bm1);
        fr.add(p);

        fr.setVisible(true);
    }

     public static void main(String[] args) {
         SwingUtilities.invokeLater(new Runnable() {
             @Override
             public void run() {
                 new Ctester();
            }
        });
    }
}

答案 1 :(得分:0)

尝试使用此代码,您可能希望将第一行代码放在try catch中,以防它找不到图像。

URL iconURL = getClass().getResource("/some/package/favicon.png");
// iconURL is null when not found
ImageIcon icon = new ImageIcon(iconURL);
fr.setIconImage(icon.getImage());

如果您只在Windows上使用此程序,请使用.ico文件,但如果它将是多平台则使用.png