2016-10-05 2 views
-1

J'ai programmé un jeu, et j'ai eu une classe appelée Ressources pendant un moment. Pour une raison quelconque, quand je ne fais presque aucune modification à la classe, ça cesse de fonctionner. Ceci est ma classe Ressources:Java: Le programme a cessé de fonctionner de manière aléatoire à cause de "java.lang.NoClassDefFoundError: Impossible d'initialiser la classe me.ryan.Resources"

public class Resources { 

public static final BufferedImage background = load("/background.png"); 
public static final BufferedImage introBackground = load("/introBackground.png"); 
public static final BufferedImage sneem = load("/sneem.png"); 
public static final BufferedImage grass = load("/grass.png"); 
public static final BufferedImage wall = load("/wall.png"); 

public static BufferedImage load(String path){ 
    URL url = Resources.class.getResource(path); 
    try { 
     return ImageIO.read(url); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

}

AUSSI: J'ai fait cette classe à partir de zéro, je ne suis pas à l'aide des bibliothèques ou ce genre de chose.

+0

concerne http://stackoverflow.com/questions/1956789/java-lang-noclassdeffounderror-could-not-initialize-class-java-net-proxyselecto?rq=1 –

+0

Aucune de ces solutions ne m'a aidé. De plus, je n'ai pas changé du tout au tout le chemin de classe quand il a fonctionné et quand il n'a pas fonctionné - il est resté le même. –

+0

Qu'avez-vous changé entre les versions de travail et de non-travail? – Dave

Répondre

2

Ce message ....

“java.lang.NoClassDefFoundError: Could not initialize class me.ryan.Resources”

signifie que l'initialisation des statics pour votre classe Resources a échoué. Le message d'exception ne dit pas pourquoi, mais le stacktrace dira probablement que ... dans la chaîne d'exception imbriquée.

L'erreur est survenue car l'un de vos appels load a échoué en raison d'une exception non cochée qui n'a pas été interceptée.


En regardant le code pour loadJe suppose que l'exception était un NullPointerException, et que cela est arrivé parce que le

Resources.class.getResource(path) 

appel est de retour null au lieu d'un objet URL. Il le fera si le classloader ne peut pas trouver une ressource dont le chemin correspond à ce que vous avez demandé.

Si c'est ce qui se passe alors la cause première est que vous avez utilisé les mauvais chemins. ou votre procédure build/deploy n'a pas placé les fichiers image requis là où le classloader s'attend à les trouver; par exemple. dans le fichier JAR, si vous exécutez à partir d'un exécutable JAR.