gpt4 book ai didi

java - 无法在 Java 中播放声音

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:19 27 4
gpt4 key购买 nike

我正在尝试向我的 Java 游戏添加声音效果,但失败了。我制作了 Sound 类,我有 .wav 文件,但由于某种原因我听不到声音,并且我收到了一些关于我的代码、未知来源或其他内容的错误,我对此不确定。我将为你们提供 Sound 类、我的类调用和错误。

我的文件夹如下所示:“...\Java Workspace\SpaceShooter\src” - 对于我的 Java .class 文件。“...\Java Workspace\SpaceShooter\src\sounds” - 用于我的 java 声音。我使用的 IDE 是 Eclipse。

这是声音类

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();
}
}
}

这就是我如何称呼我的 Sound 类。

...
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)

最佳答案

错误说明了一切

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

错误发生在这里:

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

因此,文件名是空指针,或者 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);

关于java - 无法在 Java 中播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20201357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com