2008-10-31 5 views
15

Wie Debuggen Sie getResource-style Methoden, die fehlschlagen, null zurückgeben?Debugging getResource *

Ich bin sicher, die Datei, die es sucht, ist da, aber es gibt NULL zurück. Woher weiß ich, wonach es sucht, um ein Missverhältnis zu erkennen?

Antwort

4

Sie könnten den Eclipse-Debug-Modus verwenden und einen Haltepunkt für die fehlgeschlagene Methode festlegen. Von dort aus können Sie Schritt für Schritt in den Anrufbaum gehen, bis Sie sehen, was fehlschlägt.

Am häufigsten ist, dass die Datei nicht da ist, weil es dort nicht kopiert wurde oder nicht in der Classpath etc ...

+0

ACK, das ist es, was ich auch habe. – dhiller

+0

Ja, das ist am häufigsten, es ist mehrmals passiert während der Übergang von der IDE zu einem Ant-Skript zu kompilieren ... – Vinze

3

Die getResource Aufruf für eine Datei in Bezug auf die Klassendatei suchen.

Meine erste Vermutung wäre, dass wenn Sie kompiliert haben Sie vergessen haben, die Ressourcendateien in den Kompilierordner zu legen. Darauf habe ich oft gelaufen.

0

Ich habe dies normalerweise immer wenn der ClassLoader ändert.

Abhängig vom genauen Kontext, in dem eine App ausgeführt wird, haben ClassLoaders unterschiedliche Regeln, wann eine Ressourcendatei vorhanden ist. Zum Beispiel wird bei getBeResource in netbeans nicht zwischen Groß- und Kleinschreibung unterschieden, aber in Suns JRE ist dies der Fall.

Obwohl ich deine Frage nicht direkt beantworte, dachte ich, du solltest das wissen (wenn du es nicht schon getan hast).

12

Seit getResource() sucht den Classpath (wie andere erwähnt haben), könnte es hilfreich sein, die tatsächlichen Classpath-Dump gesucht wird, bevor Sie Ihren problemsome getResource() Anruf:

log.debug("classpath is: " + System.getProperty("java.class.path")); 

//the line that is returning null 
... = Thread.currentThread().getContextClassLoader().getResource("foobar"); 

Was wohl passiert, ist, dass die Dateien/Verzeichnisse Sie denken, dass auf dem Klassenpfad tatsächlich nicht sind (vielleicht wird ein ungültiger Pfad irgendwo auf dem Weg gesetzt).

0

Ich denke, Sie sollten Eclipse oder Ihre Lieblings IDE sagen, wo die JDK (JRE) Quelldateien gefunden werden können. Dann können Sie auch in die Methoden der Java Runtime-Klassen einsteigen.