2013-04-16 55 views
0

当iv'e试图打开它时,它不能找到资源。 所以,我已经尝试过使用that solution,但我得到了另一个问题:exportet jar文件不会访问资源

Exception in thread "main" java.lang.Error: Unresolved compilation 
problem: Cannot make a static reference to the non-static method 
getClass() from the type Object 
     at Resources.getMainBG(Resources.java:21) 
     at Tetris.<init>(Tetris.java:21) 
     at Main.main(Main.java:5) 

当前的代码:

import java.awt.*; 
import java.io.File; 
import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 

public class Resources 
{ 
    // this class import the breaks's photos into an image array named "images" 
    private static Image[] images = new Image[7]; 
    private static Image[] BG = new Image[3]; // 1=frame,2=pane,3=nextPane 


    public static Image getImage(int color){ 
     if(images[color]==null){ 
      try{images[color] = new ImageIcon(getClass().getResource("images/block" + color + ".png")).getImage();} 
      catch (Exception e){e.printStackTrace();System.exit(1);}} 
     return images[color];} 

    public static Image getMainBG() { 
     if (BG[0] == null) 
      BG[0] = new ImageIcon(getClass().getResource("images/MainBG.png")).getImage(); 
     return BG[0];} 

    public static Image getPaneBG(){ 
     if (BG[1] == null) 
      BG[1] = new ImageIcon(getClass().getResource("images/PaneBG.png")).getImage(); 
     return BG[1];} 

    public static Image getNextBG() { 
     if (BG[2] == null) 
      BG[2] = new ImageIcon(getClass().getResource("images/NextBG.png")).getImage(); 
     return BG[2];} 
} 

谢是一个很大的帮助!

回答

2

异常说明了这一切 - 代码在导出时甚至没有编译。这种方法是无效的:

public static Image getMainBG() { 
    if (BG[0] == null) 
     BG[0] = new ImageIcon(getClass().getResource("images/MainBG.png")).getImage(); 
    return BG[0]; 
} 

不能调用getClass()不合格一样,在一个静态方法。当然,您可以使用Resources.class

请注意,尽管您不应该有任何问题,但您应该在之前检查您的代码是否编译,然后开始打包。

0

试试这个:

Image i = javax.imageio.ImageIO.read(getClass().getResourceAsStream("/images/x.png")); 
0

答案是例外。 你应该叫

Resources.class.getResource(...) 

,而不是

getClass().getResource(...)