代码如下,代码无需过多关注,看getResource使用的地方就可以,已用注释标出。
1 import java.awt.Image; 2 import java.awt.image.BufferedImage; 3 import java.io.IOException; 4 import java.net.URL; 5 import javax.imageio.ImageIO; 6 7 public class GameUtil { 8 // 工具类最好将构造器私有化。 9 private GameUtil() { 10 11 } 12 13 public static Image getImage(String path) { 14 BufferedImage bi = null; 15 try { 16 //getResource方法调用处 17 URL u = GameUtil.class.getClassLoader().getResource(path); 18 bi = ImageIO.read(u); 19 } catch (IOException e) { 20 e.printStackTrace(); 21 } 22 return bi; 23 } 24 }
1 import javax.swing.*; 2 import java.awt.*; 3 import java.awt.event.WindowEvent; 4 import java.awt.event.WindowAdapter; 5 6 public class GameFrame extends JFrame { 7 public static void main(String[] args){ 8 new GameFrame().lauchFrame(); 9 } 10 11 public void lauchFrame(){ 12 setVisible(true); 13 setTitle("灰机大战"); 14 setBounds(200, 50, 800, 700); 15 addWindowListener(new WindowAdapter(){ 16 @Override 17 public void windowClosing(WindowEvent e) { 18 System.exit(0); 19 } 20 }); 21 } 22 23 @Override 24 public void paint(Graphics g){ 25 g.drawImage(bgImage, 0, 0, null); 26 g.drawImage(planeImage, 400, 650, null); 27 } 28 29 //给getResource方法传入参数 30 private Image bgImage = GameUtil.getImage("material/bg.jpg"); 31 private Image planeImage = GameUtil.getImage("material/plane.png"); 32 }
程序运行时抛出异常,原因是resource(即要加载进程序的文件)所存放路径不对,需放到getResource默认路径下,解决方法如下:
解决,先得知getSource方法默认路径:
图示为需要把程序所要用的资源文件放到JavaSe文件夹里。
注:默认路径下已有“/“斜杠,所以传入参数时前面无需再加"/"。