image不会出现在jframe中

zbwhf8kr  于 2021-07-07  发布在  Java
关注(0)|答案(2)|浏览(314)
import javax.swing.*;
public class GUI {
    public static void main(String s[]) {
        ImageIcon image = new ImageIcon("logo.png");

        JFrame frame = new JFrame();
        JLabel label = new JLabel();
        label.setIcon(image);

        label.setText("Boom");
        frame.setTitle("SJ");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500,500);
        frame.setVisible(true);
        frame.add(label);
    }  
}

我是初学者,只是在学习 JFrame ,你们能告诉我为什么图像没有出现吗?我已经把图片(logo.png)放在那个类所在的文件夹中。我使用vscode作为ide。提前谢谢!!

arknldoa

arknldoa1#

非常感谢所有试图帮助我的人!!
我用过:

java.net.URL imageURL = app.class.getResource("download.png");
    ImageIcon img = new ImageIcon(imageURL);

成功了!!我在这里提到过!

kcrjzv8t

kcrjzv8t2#

把旧的上网本掸了掸然后试一下。。。
您可以这样做:

ImageIO.read(getClass().getResource("logo.png"))

基本上,图像作为一种资源捆绑在jar文件中,为了正确地提取它,您需要类#getresource(string name)
下面是我的完整示例和我的图像位置截图:

testapp.java文件:

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class TestApp {

    public TestApp() {
        initComponents();
    }

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

    private void initComponents() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        BufferedImage img = null;
        try {
            img =  ImageIO.read(getClass().getResource("logo.png"));
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        JLabel label = new JLabel(new ImageIcon(img));
        frame.add(label);
        frame.pack();
        frame.setVisible(true);
    }

}

产生:

如果您的徽标可能位于嵌套的java包中,如下所示:

您只需执行以下操作:

ImageIO.read(getClass().getResource("images/logo.png"))

更新:
如@camickr所述,将所有组件添加到 JFrame 在让它可见之前。
此外,所有swing组件都应该通过在edt上创建 SwingUtilities.invokeLater 如我的例子所示。

相关问题