【问题标题】:When I running as an exported jar, I get a FileNotFound exeption当我作为导出的 jar 运行时,我得到一个 FileNotFoundexception
【发布时间】:2020-01-21 16:22:31
【问题描述】:

我正在创建一个运行一些声音文件的程序。当我在我的 IDE (Eclipse) 中运行它时,它运行良好,但是从 jar 运行时,文件的路径似乎已经改变。该项目的路径是:

MyProject: 
           src (in build path):
                package:
                       AudioFile.java
                       SoundEffectManager.java
           assets (in build path):
                 sounds:
                      soundfile.wav

以及读取文件的 AudioFile.java 代码:

import java.io.File;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineEvent;
import javax.sound.sampled.LineListener;

public class AudioFile implements LineListener {
    private File audioFile;
    private boolean paused = false;
    private AudioInputStream ais;
    private AudioFormat format;
    private DataLine.Info info;
    private Clip clip;
    private volatile boolean playing;

   // Constructor
    public AudioFile(String fileName) {
        try {
        audioFile = new File(fileName);
        ais = AudioSystem.getAudioInputStream(audioFile);
        format = ais.getFormat();
        info = new DataLine.Info(Clip.class, format);
        clip = (Clip) AudioSystem.getLine(info);
        clip.addLineListener(this);
        clip.open(ais);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
    // Play Pause and other helpers
    public void play() {
        clip.start();
        playing = true;
    }

    public boolean isPlaying() {
        return playing;
    }

    public void stop() {
        clip.stop();
        clip.flush();
        clip.setFramePosition(0);
        playing = false;
    }

    public void pause() {
        if (!paused) {
        paused = true;
        clip.stop();
        }
    }
    public void resume() {
        if (paused) {
            clip.start();
            paused = false;
        } 
    }
    @Override
    public void update(LineEvent event) {
        if (event.getType() == LineEvent.Type.START && !paused) {
            playing = true;
        }
        else if (event.getType() == LineEvent.Type.STOP && !paused) {
            clip.stop();
            clip.flush();
            clip.setFramePosition(0);
            playing = false;
            paused = false;
        }

    } 

}

创建 AudioFile 的 SoundEffectManager.java 代码(省略了帮助程序和导入)

public class SoundEffectManager implements Runnable {
    private ArrayList<AudioFile> soundList;
    private volatile boolean running;
    public volatile ArrayList<AudioFile> playingSounds;
    public SoundEffectManager(String... sounds) {
        soundList = new ArrayList<AudioFile>();
        for(String sound : sounds) {
            soundList.add(new AudioFile("./assets/sounds/" + sound + ".wav"));
        }

    }
}

当调用 SoundEffectManager 构造函数时,它会使用参数调用:“soundfile”

由于 java.io.FileNotFound 异常,此代码在 IDE 中有效,但在可运行 jar 中无效。 jar 的文件路径是:

jarfile.jar:
            package:
                       AudioFile.class
                       SoundEffectManager.class

            META-INF:
                      MANIFEST.MF
            sounds:
               soundfile.wav


如果你能帮忙,谢谢。

【问题讨论】:

    标签: java jar ide filenotfoundexception


    【解决方案1】:

    您必须将声音文件放在资源文件夹中。然后就可以通过类加载器获取路径了。这应该可以在您的 ide 和 jar 文件中使用。

    this.getClass().getClassLoader().getResource("soundfile").getPath()
    

    【讨论】:

      猜你喜欢
      • 2017-06-05
      • 2012-04-10
      • 2019-10-19
      • 2012-05-11
      • 2012-08-15
      • 2023-03-27
      • 2020-10-03
      • 1970-01-01
      相关资源
      最近更新 更多