我在导出正在处理的项目时遇到问题,该项目调用通过实现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处理代码的方式不同?
答案 0 :(得分:0)
事实证明,实际的解决方案是我将声音文件存储在jar中,因此我对目录的引用无效,因为它已经移动了目录。当声音文件被移动到jar外部时,它会工作并读取文件并运行线程。