Java 构建简单窗口时出错?

Java 构建简单窗口时出错?,java,swing,user-interface,compiler-errors,Java,Swing,User Interface,Compiler Errors,我正试图建立一个窗口与一个图片,掩盖了屏幕。图片是一个JLabel,窗口是一个JFrame。在尝试了无数种方法并查阅了数小时的多个教程之后,我还不知道如何做到这一点。我同意,这是一个非常简单的问题,但我根本不明白如何处理这个问题。以下是我尝试过的代码(我注释掉了我之前尝试过的一些东西): 非常感谢您花这么多时间阅读本文,我非常感谢您为帮助一位程序员同事所付出的努力 问题1。。。 您没有main方法,因此除非您从另一个类创建该类,否则它不会运行 public static void main(St

我正试图建立一个窗口与一个图片,掩盖了屏幕。图片是一个JLabel,窗口是一个JFrame。在尝试了无数种方法并查阅了数小时的多个教程之后,我还不知道如何做到这一点。我同意,这是一个非常简单的问题,但我根本不明白如何处理这个问题。以下是我尝试过的代码(我注释掉了我之前尝试过的一些东西):

非常感谢您花这么多时间阅读本文,我非常感谢您为帮助一位程序员同事所付出的努力

问题1。。。 您没有main方法,因此除非您从另一个类创建该类,否则它不会运行

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                ex.printStackTrace();
            }

            Mewindow frame = new Mewindow();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    });
}
问题2。。。 现在,您将遇到一个
NullPointerException
,因为
mewindow
没有初始化,但是,您实际上并不需要它,因为您正在使用类的构造函数中的值,因此如果尝试初始化它,您将得到一个
StackOverflowException
。。。但无论如何,使用它是没有意义的

public class Mewindow extends JFrame {

    private JLabel mepic
    public Mewindow() {

        super("Here is a picture of ME!");

        setLayout(new GridLayout(1, 0, 0, 0));

        mepic = new JLabel(new ImageIcon(getClass().getResource("me.png")));
        add(mepic);

        setVisible(true);
        setSize(250, 250);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }
}
现在,您的代码假设
me.png
存储在与
Mewindow
相同的包中,请注意这一点

以及实际运行的结果代码(替换为我自己的图片)

建议。。。
不要直接从
JFrame
扩展,而是使用
JPanel
,然后将其添加到
JFrame
的实例中,您的代码将更加可重用

谢谢,这已经解释得很清楚了。我想我应该直接将图像放入JLabel本身!您的意思是“不要直接从JFrame扩展,而是使用JPanel,然后将其添加到JFrame的实例中,您的代码将更加可重用”?而且,我的图像没有填满整个窗口,为什么?它可能是映像本身,但是…?通常不鼓励从顶级容器扩展,因为它会将您锁定在单个用例中,并且您没有真正向类添加任何新功能。它还附带了一系列其他管理问题,最好由实现来解决
JLabel
不会缩放图像,事实上,任何Swing组件都不会缩放图像,相反,您需要实现自己的功能查看并
public class Mewindow extends JFrame {

    private JLabel mepic
    public Mewindow() {

        super("Here is a picture of ME!");

        setLayout(new GridLayout(1, 0, 0, 0));

        mepic = new JLabel(new ImageIcon(getClass().getResource("me.png")));
        add(mepic);

        setVisible(true);
        setSize(250, 250);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }
}