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.