我已经浏览了我在这个网站上找到的所有帖子和 Java 教程,但我仍然无法弄清楚为什么我的代码无法正常工作。即使我复制/粘贴其他人的代码,它仍然不起作用。
我制作了一个虚拟程序来测试它,代码如下所示:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
public class gui extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
gui frame = new gui();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public gui() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 900, 700);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblNewLabel = new JLabel(new ImageIcon("bg.png"));
contentPane.add(lblNewLabel);
}
}
我要显示的背景图像 bg.png 位于项目的根文件夹中。我尝试了多种格式的路径字符串但没有成功。我做错了什么?
最佳答案
您做错的是,当您调用 new ImageIcon("bg.png")
时,您尝试从 当前目录。当前目录是执行 java
的目录。当您从 IDE 执行 java
时,当前目录可能不是您认为的目录。
使用以下代码显示当前目录:
File dir1 = new File (".");
System.out.println("current directory: " + dir1.getAbsolutePath());
您应该使用 Class.getResource("/images/bg.png")
从类路径加载 png 文件。在源目录中创建一个 images
文件夹,并将文件放在该目录中。您的 IDE 会将其与 .class
文件一起复制到目标文件夹。如果您不使用 IDE,则必须自己复制。
编辑:
经过更多调查,问题的根本原因似乎是使用了 null 布局。不过,上面的内容仍然有效,因为从当前目录加载文件不是一个好主意。
关于java - 图像不会显示在 JLabel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883937/