代号一:.createMedia 方法和音频文件问题

问题描述 投票:0回答:1

我正在尝试使用 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)

任何帮助都意味着很多我一直致力于制作这个音频播放器。

java codenameone
1个回答
0
投票

要修复堆栈跟踪,请修复此代码:

catch (IOException ioe) { ioe.printStackTrace(); }

对此:

catch (IOException ioe) { 
   if(ios.getCause() != null) {
       ios.getCause().printStackTrace
   }
   ioe.printStackTrace(); 
}

这应该回答问题或提供适用的附加详细信息。假设是后者,请使用其他详细信息编辑问题,我将改进这个答案。

© www.soinside.com 2019 - 2024. All rights reserved.