我有这段代码,但我不知道如何加载图片stone.png以便我可以使用它。
package mine.mine.mine;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class MainGame {
private static void showGUI()
{ JFrame frame = new JFrame("Mine Mine Mine");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(496, 496));
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
BufferedImage img = null, diamond = null, emerald = null, gold = null, lapis = null, iron = null, redstone = null, coal = null; //Ignore these.
try {
img = ImageIO.read(new File("stone.png")); //Main problem is here. Used debug method on line 27.
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "ERROR: The game has corrupted/missing files. Please redownload the game.", "Mine Mine Mine", JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(null, e.getStackTrace());
}
}
public static void main(String args[]){
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
showGUI();
}
});
}
}
我想在JLabel或JFrame上显示stone.png,这是我第一次尝试这样做,所以请不要叫我一个菜鸟。 ;)
答案 0 :(得分:2)
存储在Jar文件中的图像(或任何内容)无法像File
一样进行访问,而是需要使用Class#getResource
,它将返回URL
,可由URL
使用API的许多部分都可以加载这些资源。
如果API的一部分不接受Class#getResourcesAsStream
,您可以使用InputStream
代替img = ImageIO.read(MainGame.class.getResource("stone.png"));
。
像...一样的东西。
stone.png
这假设{{1}}是jar文件的默认/顶级目录,如果它在子目录中,则需要指定jar文件根目录的完整路径