reproducir el archivo .wav del jar como recurso usando java

Quiero reproducir un archivo .wav usando el código de Java que está en un archivo jar como recurso. Mi código es así:

try { URL defaultSound = getClass().getResource("/images/ads/WindowsNavigationStart.wav"); // getClass().getSy.getResource("/images/ads/WindowsNavigationStart.wav"); File soundFile = new File(defaultSound.toURI()); AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile); Clip clip = AudioSystem.getClip(); clip.open(audioInputStream); clip.start( ); } catch (Exception ex) { ex.printStackTrace(); } 

El archivo WindowsNavigationStart.wav existe en uno de mis archivos jar. Pero obteniendo la siguiente excepción:

 java.lang.IllegalArgumentException: URI is not hierarchical at java.io.File.(File.java:363) at au.com.webscan.wwwizard.app.admin.customfile.UpOneLevelFolder.btnUpFolderActionPerformed(Unknown Source) at au.com.webscan.wwwizard.app.admin.customfile.UpOneLevelFolder.access$000(Unknown Source) at au.com.webscan.wwwizard.app.admin.customfile.UpOneLevelFolder$1.actionPerformed(Unknown Source) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) at java.awt.Component.processMouseEvent(Component.java:6288) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6053) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4651) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4481) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4481) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643) at java.awt.EventQueue.access$000(EventQueue.java:84) at java.awt.EventQueue$1.run(EventQueue.java:602) at java.awt.EventQueue$1.run(EventQueue.java:600) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) at java.awt.EventQueue$2.run(EventQueue.java:616) at java.awt.EventQueue$2.run(EventQueue.java:614) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:613) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

Por favor, dame una solución. Gracias a todos.

Cambio:

 AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(soundFile); 

A:

 System.out.println("defaultSound " + defaultSound); // check the URL! AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(defaultSound); 

Has probado:

 InputStream is= getClass().getResourceAsStream("/images/ads/WindowsNavigationStart.wav"); AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(is); 

Básicamente, no creo que pueda crear un archivo a partir de un URI en el archivo jar. Pero puedes pasar la stream de entrada directamente.

Utilice Class.getResourceAsStream ()

Una vez que tenga un control para el inputStream, obtenga el audioInputStream y haga el rest.

 InputStream is = getClass().getResourceAsStream("......"); AudioInputStream ais = AudioSystem.getAudioInputStream(is); Clip clip = AudioSystem.getClip(); clip.open(ais); 

Solución perfecta…….

 URL url = this.getClass().getResource("sounds/beep.au"); String urls=url.toString(); urls=urls.replaceFirst("file:/", "file:///"); AudioClip ac=Applet.newAudioClip(new URL(urls)); ac.play(); 

Por favor refiérase a mi respuesta anterior al hacer una aplicación Java de una sola jarra . El título es engañoso, pero el póster intentaba hacer algo casi idéntico a ti. Algunos de los mejores detalles están en el enlace al registro de chat.

  try { AudioPlayer.player.start(new AudioStream(getClass().getResourceAsStream("/sound/SystemNotification.wav"))); } catch (Exception e) { e.printStackTrace(); } 

Esto funcionó bien para mi:

 public void playSound() { InputStream in; try { in = new BufferedInputStream(new FileInputStream(new File( getClass().getClassLoader() .getResource("com/kaito/resources/sound.wav").getPath()))); AudioStream audioStream = new AudioStream(in); AudioPlayer.player.start(audioStream); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 

Lo siguiente me permite reproducir un sonido en el proyecto Eclipse y un archivo jar exportado:
– tenga en cuenta que se utiliza el BufferedInputStream
– Nota, se usa inputStream en lugar de archivo.

En mi principal ():

 playAlarmSound(); 

en mi clase:

 public static void playAlarmSound() { ClassLoader classLoader = App.class.getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream("alarmsound.wav"); try { Clip clip = AudioSystem.getClip(); AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(inputStream)); clip.open(ais); clip.start(); } catch (IOException | LineUnavailableException | UnsupportedAudioFileException e) { System.err.println("ERROR: Playing sound has failed"); e.printStackTrace(); } } 

como Kal escribió:

  1. InputStream es = getClass (). GetResourceAsStream (“……”);
  2. AudioInputStream ais = AudioSystem.getAudioInputStream (es); …

Hice exactamente eso y al principio no funcionó, pero el problema de “java.io.IOException” fue que utilicé File.separator y por alguna razón win 8.1 no pudo manejar “\\” …

 public AudioInputStream getSound(String fileName){ InputStream inputSound; AudioInputStream audioInStr; String fs = File.separator; try { absolutePath = fs +packageName+ fs +folderName+ fs +fileName; inputSound = getClass().getResourceAsStream(absolutePath); //if null pointer exception try unix, for some reason \\ doesn't work on win 8.1 if(inputSound == null) { absolutePath = "/" + packageName + "/" + folderName + "/" + fileName; inputSound = getClass().getResourceAsStream(absolutePath); } audioInStr = AudioSystem.getAudioInputStream(new BufferedInputStream(inputSound)); return audioInStr; }