2013-11-25 2 views
1

Я пытаюсь добавить звуковые эффекты в свою Java-игру, и я не могу этого сделать. Я сделал класс Sound, у меня есть .wav-файлы, но по какой-то причине я не слышу звук, и у меня возникают некоторые ошибки в отношении моего кода, неизвестного источника или чего-то еще, я не уверен в этом. Я дам вам, ребята, класс Sound, мой вызов класса и ошибки.Невозможно воспроизвести звуки в Java

Мои папки выглядят так: «... \ Java Workspace \ SpaceShooter \ src» - для файлов Java .class. "... \ Java Workspace \ SpaceShooter \ src \ sounds" - для моих звуков java. IDE, которую я использую, - Eclipse.

Это класс Sound

import java.applet.Applet; 
import java.applet.AudioClip; 

public class Sound { 
    public static final Sound laser = new Sound("sounds/laser.wav"); 
    private AudioClip clip; 

    public Sound (String filename){ 
     try{ 
      clip = Applet.newAudioClip(Sound.class.getResource(filename)); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    public void play(){ 
     try{ 
      new Thread(){ 
       public void run(){ 
        clip.play(); 
       } 
      }.start(); 
     }catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 

Это, как я называю мой звук класса.

... 
if (code == KeyEvent.VK_UP) 
    if (!player1weapon.isFalling){ 
     player1weapon.isFalling = true; 
     Sound.laser.play(); 
    } 

И ошибки

java.lang.NullPointerException 
    at sun.applet.AppletAudioClip.<init>(Unknown Source) 
    at java.applet.Applet.newAudioClip(Unknown Source) 
    at Sound.<init>(Sound.java:10) 
    at Sound.<clinit>(Sound.java:5) 
    at SpaceInvadersPanel$4.keyPressed(SpaceInvadersPanel.java:71) 
    at java.awt.Component.processKeyEvent(Unknown Source) 
    at javax.swing.JComponent.processKeyEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) 
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source) 
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) 
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) 
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
Exception in thread "Thread-2" java.lang.NullPointerException 
    at Sound$1.run(Sound.java:20) 
+0

Пропустить нить. clip.play() не блокирует. Он просто начинает играть в клип и сразу возвращается. – isnot2bad

ответ

1

ошибка говорит, что это все

java.lang.NullPointerException 
    at sun.applet.AppletAudioClip.<init>(Unknown Source) 
    at java.applet.Applet.newAudioClip(Unknown Source) 

Ошибка возникает здесь:

clip = Applet.newAudioClip(Sound.class.getResource(filename)); 

, так что либо filename является nullpointer, либо возвращаемое значение Sound.class.getResource (filename) является нулевым символом.

Попробуйте отладить проверку этих значений, распечатав их и посмотрев, что они собой представляют.

Sound sound = Sound.class.getResource(filename); 

System.out.println(sound); 
System.out.println(filename); 

if (filename != null && sound != null) clip = Applet.newAudioClip(sound); 
+0

Можете ли вы подробно остановиться на этом? Я понимаю, что вы имеете в виду, но я не уверен, что делать. – MrSilent

+0

Nevermind, я понял, что вы имеете в виду, и это работает. Ты мой герой, спасибо. – MrSilent

+0

Я сделал редактирование, в основном просто проверяю, что используемые объекты не являются нулевыми, потому что это то, что вам сказал компилятор: nullpointer. – fonZ

Смежные вопросы