在eclipse中工作但在可执行文件中不工作

时间:2014-11-26 21:10:04

标签: java eclipse jar

我想要的只是将它变成Jar工作,Eclipse中没有问题,但jar不播放音乐。我试过几个"解决方案"从谷歌,stackoverflow无论如何。对不起,简短的解释,我的英语说得不太好。希望有人可以提供帮助:(

class Soundboard implements ActionListener {

    public Soundboard() {
    }

    @Override
    public void actionPerformed(ActionEvent ev) {
        if (ev.getSource() instanceof JButton) {
            JButton b = (JButton) ev.getSource();
            // getClass().getSystemResource("images/SomeImage.png")
            String build = "sound/" + b.getText() + ".au";
            try {
                playMusic(new File(build));
            } catch (UnsupportedAudioFileException | IOException
                    | LineUnavailableException e) {
                e.printStackTrace();
            }
        }
    }

    private void playMusic(File file) throws UnsupportedAudioFileException,
            IOException, LineUnavailableException {
        AudioInputStream stream = AudioSystem.getAudioInputStream(file);
        AudioFormat format = stream.getFormat();
        DataLine.Info info = new DataLine.Info(Clip.class, format);
        Clip clip = (Clip) AudioSystem.getLine(info);
        clip.open(stream);
        clip.start();
    }
}

2 个答案:

答案 0 :(得分:0)

我怀疑在创建jar时,资源文件被放入不同的目录中,当你在Eclipse中构建它们时,所以你的代码看起来错误。您可以通过使用jar -tvf myFile.jar

检查jar目录结构来查看文件的位置

研究将资源文件放在jar中的位置,以便您的java代码可以找到它们。

希望有所帮助。

编辑:上面执行jar命令时你看到了什么?你应该看到像

这样的东西
     >jar -tvf soap-tcp.jar
     0 Thu Aug 21 05:05:26 BST 2014 META-INF/
  5118 Thu Aug 21 05:05:24 BST 2014 META-INF/MANIFEST.MF
     0 Thu Aug 21 05:05:22 BST 2014 META-INF/logmessages/
     0 Thu Aug 21 05:05:22 BST 2014 META-INF/loggerinfo/
     0 Thu Aug 21 05:05:22 BST 2014 org/
     0 Thu Aug 21 05:05:22 BST 2014 org/glassfish/
     0 Thu Aug 21 05:05:22 BST 2014 org/glassfish/webservices/
     0 Thu Aug 21 05:05:22 BST 2014 org/glassfish/webservices/transport/

仅使用jar中的目录和文件。这将告诉您打包过程放置音频文件的位置。

答案 1 :(得分:0)

您可能应该使用 ClassLoader 将文件内容作为InputStream加载。还要检查音频文件是否在jar中。 - @GáborBakos8分钟前

它正在运作! ClassLoader是缺少的东西!

AudioInputStream stream = AudioSystem.getAudioInputStream(ClassLoader.getSystemResource(file));