Ficheros dentro del ejecutable .jar
Usar las rutas relativas en java, incluso usando un IDE como Netbeans no es fácil. Java es muy potente para el acceso a todo tipo de ficheros estén donde estén y con independencia del sistema operativo. Pero esa potencia lleva una cierta complejidad.
Los ficheros .jar son ejecutables de java que pueden contener todo tipo de ficheros que use el programa. Así, un icono de un botón que esté incluido en el .jar se puede colocar con ayuda del método getResources, pero un fichero de texto plano o un fichero de sonido no pueden ser cargados de la misma manera ya que el método file() no acepta URLs.
En este artículo podremos ver una manera de poder tener ficheros de sonido en un .jar y cómo abrirlos. Usaremos algunas cosas de Netbeans, pero creo que se puede exportar a otros IDEs o hacerlo directamente "a mano".
Si usamos Netbeans, pondremos los archivos de sonido dentro de una carpeta que esté dentro del proyecto. Luego con el botón derecho en el proyecto -> build. Así quedará dentro del .jar.
Para poder abrirlos tendremos que hacer un fichero temporal, pasar a este toda la información de original y luego abrirlo. Para ello podemos usar el método getResourceAsStream
Este es el código aproximado:
File temp = File.createTempFile("sonido", ".wav");
InputStream is = this.getClass().getResourceAsStream("nombre del fichero");
FileOutputStream destino = new FileOutputStream(temp);
FileWriter fw = new FileWriter(temp);
byte[] buffer = new byte[512*1024];
int n;
while ((n = is.read(buffer)) != -1)
destino.write(buffer, 0, n);
Faltaría añadir try{}catch() y poner la ruta del fichero.