Sì, beh... sono andato molto a memoria di una cosa che avevo visto su SO, può essere che abbia scritto una castroneria... un metodo che uso e che funziona è questo:

codice:
    private String getMyPath() {
        String str = getClass().getResource("NomeClasse.class").toExternalForm();

        int start = 0;
        int end = str.indexOf("NomeDelJar.jar");
        if ( str.startsWith("jar:") ) {
            start = 4;
        }

        if (str.indexOf("file:/") >= 0) {
            start += 6;
        }
        
        str = str.substring(start, end);
        str = str.replaceAll("%20", " ");

        return str;
    }

Dove NomeClasse.class è il nome di una classe dell'applicazione e NomeDelJar.jar è il nome del file JAR che contiene l'applicazione... questo codice va adeguato alle situazioni: se, ad esempio, il JAR dell'applicazione è all'interno di una sub-directory, allora va adeguato di conseguenza il nome del jar, apponendovi davanti il nome della sub-directory. Insomma, ce la si gioca un po'.


Ciao.