将内部Runnable类导出到jar(剪辑)

时间:2012-11-30 04:08:43

标签: java multithreading runnable

我在导出正在处理的项目时遇到问题,该项目调用通过实现runnable来对事件进行线程化的内部类。它将在eclipse中正常工作,但是在导出时,它将无法启动内部类。这只适用于实现runnable的类。

这只发生在导出的jar格式中,但在eclipse中可以很好地工作。

我正在调用线程:

new Thread(new SomeRunnable()).start();

SomeRunnable在哪里

public class SomeRunnable implements Runnable {

@Override
public void run() {
    //Create a clip
    try {
        Clip clip;
        clip = AudioSystem.getClip();
        AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
        clip.open(audioIn);
        clip.loop(reps);
    } catch (LineUnavailableException e1) {
        e1.printStackTrace();
        System.exit(0);
    } catch (UnsupportedAudioFileException e1) {
        e1.printStackTrace();
        System.exit(0);
    } catch (IOException e1) {
        e1.printStackTrace();
        System.exit(0);
    }
    System.out.println("Successful.");
}

当导出为runnable jar格式时,程序将正确启动并显示GUI,但是当它被告知运行线程SomeRunnable时,它将什么也不做,甚至不输入try catch语句,因为它没有播放剪辑,也不退出程序。这表明jar没有识别类文件,也不会从main方法调用它们。

什么会导致jar的工作方式与eclipse处理代码的方式不同?

1 个答案:

答案 0 :(得分:0)

事实证明,实际的解决方案是我将声音文件存储在jar中,因此我对目录的引用无效,因为它已经移动了目录。当声音文件被移动到jar外部时,它会工作并读取文件并运行线程。