【问题标题】:What to replace this java code with?用什么替换这个java代码?
【发布时间】:2009-03-09 11:55:55
【问题描述】:

以下代码用于在我的 java 小程序中播放声音文件:

public synchronized void play() {
   try {
          //Here filename is a URL retreived through
          //getClassLoader().getResource()
            InputStream in = new FileInputStream(filename.getFile());
            AudioStream as = new AudioStream(in);
            AudioPlayer.player.start(as); 

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

当我使用 Eclipse 在本地运行小程序时它可以工作,但如果我尝试将它打包在 .jar 中并在 Web 浏览器中作为小程序运行,它就不起作用。注释掉这段代码使小程序工作。

我应该用什么替换上面的代码,这样它才能在小程序中工作?

【问题讨论】:

    标签: java applet audio


    【解决方案1】:

    尝试在 ClassLoader 上使用 getResourceAsStream() 而不是 new FileInputStream()。这将返回一个 InputStream,您可以将其传递给 AudioStream。所以像:

    InputStream in = getClassLoader().getResourceAsStream(getClassLoader().getResource());
    AudioStream as = new AudioStream(in)
    

    【讨论】:

      【解决方案2】:

      使用ClassLoader.getResourceAsStreamURL.openStream。请记住关闭您的流以避免资源泄漏。

      或者,检查AudioClip 类是否满足您的需求:

        private AudioClip sound = null;
      
        private AudioClip getSound() {
          if (sound == null) {
            ClassLoader classLoader = TestApplet.class
                .getClassLoader();
            URL url = classLoader.getResource("assets/sound.wav");
            sound = JApplet.newAudioClip(url);
          }
          return sound;
        }
      

      【讨论】:

        【解决方案3】:

        使用getClassLoader().getResourceAsStream() 代替new FileInputStream(...)。这里不涉及本地文件(可能,例如使用 jar 文件时)。基本上,您想要获取声音数据的流,当您从类路径中获取资源时,getResourceAsStream() 是最简单的方法。

        (如果需要,您可以使用getResource() 后跟openStream(),但这没什么意义。)

        【讨论】:

          【解决方案4】:

          查看java.lang.ClassLoader 类中的getResourceAsStream() 方法。

          即使您没有 JAR,只要相关文件在您的 CLASSPATH 中,这仍然有效。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-18
            • 1970-01-01
            相关资源
            最近更新 更多