Java 声音加载在ubuntu中工作,但在windows中不工作

Java 声音加载在ubuntu中工作,但在windows中不工作,java,ubuntu,audio,Java,Ubuntu,Audio,我用java编写了一个播放声音的方法。它在我的ubuntu笔记本电脑上运行良好,但在windows上不起作用。没有错误,但我认为出于某种原因,它可能会绕过windows上的drain方法 public static void runOnce(final String location) { new Thread(new Runnable() { public void run() { try { File audio

我用java编写了一个播放声音的方法。它在我的ubuntu笔记本电脑上运行良好,但在windows上不起作用。没有错误,但我认为出于某种原因,它可能会绕过windows上的drain方法

public static void runOnce(final String location) {
    new Thread(new Runnable() {
        public void run() {
            try {
                File audioFile = new File(Game.gameFolder + "/sounds/" + location);
                final AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);

                AudioFormat format = audioStream.getFormat();

                DataLine.Info info = new DataLine.Info(Clip.class, format);

                final Clip audioClip = (Clip) AudioSystem.getLine(info);

                audioClip.open(audioStream);
                audioClip.start();
                audioClip.drain();
                try {
                    audioClip.close();
                    audioStream.close();
                } catch (Exception e) {
                    System.out.println("heyeyeyeyye");
                }
                System.out.println("sound method ran");
            } catch(Exception e) {}
        }
    }).start();
}
谢谢-泰勒

编辑: 我记得在我使用drain之前,它实际上在windows上工作,但是在一段时间后它就不再加载了,所以我切换到drain,我建议您使用,并且您加入()您启动的线程,并且永远不要吞下来自
异常的消息。大概

public static void runOnce(final String location) {
    File audioFile = new File(Game.gameFolder + "/sounds/" + location);
    Thread t = new Thread(new Runnable() {
        public void run() {
            try (AudioInputStream audioStream = AudioSystem
                    .getAudioInputStream(audioFile);) {
                AudioFormat format = audioStream.getFormat();
                DataLine.Info info = new DataLine.Info(Clip.class, format);
                try (Clip audioClip = (Clip) AudioSystem.getLine(info);) {
                    audioClip.open(audioStream);
                    audioClip.start();
                    audioClip.drain();
                }
                System.out.println("heyeyeyeyye");
                System.out.println("sound method ran");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    t.start();
    t.join();
}

不仅仅是路径中的前斜杠有问题?它实际上每隔几分钟播放一次声音,所以它可以确定地读取它。此外,它还打印“sound method Run”(声音方法运行)所需的次数/与on相同的次数ubuntu@sje397正向斜杠将由windows上的JVM进行转换。您是否应该等待整个剪辑播放完毕后再关闭?如果你播放一个小时的剪辑,整个剪辑会播放。。。排水管会一直等到完成,这就是为什么我把它放在一个单独的线程中。我刚刚找到一个实现线程的类。它在我的电脑(ubuntu)上工作,所以当我可以再次使用我的妈妈时,我会在那里测试它。如果你想看的话,我从第一个答案中得到了答案。你的可能也会有,但似乎我也可以用它做更多的事情