我正在尝试使用 Codename One 为游戏制作音频播放器,但我遇到了 .createMedia 方法的问题。
public class AudioPlayer {
private Media MEDIA = null;
public Media media;
public void playAudio(String fileName) {
try {
if (MEDIA == null) {
InputStream is = CN.getResourceAsStream(fileName);
System.out.println(is);
MEDIA = MediaManager.createMedia(is, "audio/wav", new Runnable() {
@Override
public void run() {
MEDIA = null;
}
});
if (MEDIA != null && MEDIA.isPlaying() == false) {
MEDIA.setVolume(100);
MEDIA.play();
} }
} catch (IOException ioe) { ioe.printStackTrace(); }
} }
实例化 playAudio 和 AudioPlayer 的类:
public AudioPlayer audioPlayer = new AudioPlayer(); //audio player
public VolumeButton volumeButton = new VolumeButton();
public Game() {
changeState(sceneNum);
audioPlayer.playAudio("/fluffingADuck.wav");
我几乎可以肯定这不是文件路径的问题,因为当我打印出“is”时我得到了一个地址,并且我使用 is.available() 来检查“is”中是否有字节。 我还尝试使用 .mp3 而不是 .wav 文件,但无济于事。 这是我得到的堆栈跟踪;尽管出现错误,程序仍然能够运行
java.io.IOException
at com.codename1.impl.javase.JavaSEPort.createMedia(JavaSEPort.java:9535)
at com.codename1.ui.Display.createMedia(Display.java:3705)
at com.codename1.media.MediaManager.createMedia(MediaManager.java:306)
at com.example.audio.AudioPlayer.playAudio(AudioPlayer.java:31)
at com.example.myapp.Game.<init>(Game.java:30)
at com.example.myapp.Game.getGame(Game.java:39)
at com.example.myapp.MyApp.runApp(MyApp.java:14)
at com.codename1.system.Lifecycle.start(Lifecycle.java:129)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at com.codename1.impl.javase.Executor$3$2.run(Executor.java:340)
at com.codename1.ui.Display.executeSerialCall(Display.java:1395)
at com.codename1.ui.Display.processSerialCalls(Display.java:1379)
at com.codename1.ui.Display.mainEDTLoop(Display.java:1166)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
任何帮助都意味着很多我一直致力于制作这个音频播放器。
要修复堆栈跟踪,请修复此代码:
catch (IOException ioe) { ioe.printStackTrace(); }
对此:
catch (IOException ioe) {
if(ios.getCause() != null) {
ios.getCause().printStackTrace
}
ioe.printStackTrace();
}
这应该回答问题或提供适用的附加详细信息。假设是后者,请使用其他详细信息编辑问题,我将改进这个答案。