将内部可运行类导出到 jar(剪辑)中
Posted
技术标签:
【中文标题】将内部可运行类导出到 jar(剪辑)中【英文标题】:Exporting internal Runnable Classes into jar (Clips) 【发布时间】:2012-11-18 07:11:10 【问题描述】:我在导出我正在处理的项目时遇到问题,该项目通过实现可运行来调用线程事件的内部类。它在eclipse中可以正常工作,但是导出的时候会启动内部类失败。这只发生在实现可运行的类中。
这仅在导出的 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 处理代码的方式不同?
【问题讨论】:
这不应该发生。也许你的出口遗漏了一些东西。您可以尝试远程调试:eclipsezone.com/eclipse/forums/t53459.html 或添加一些额外的日志消息。你能看到导出的 jar 中的内部类吗? 是的,我拿了 jar 文件并将其更改为 zip 文件以查看里面的内容,并且所有需要的文件都在那里。不过,我会尝试该链接。谢谢! 我也有相当多的日志消息,并且已将问题确定为仅是实现可运行的类的主要问题。该程序将识别任何其他未实现该功能的类。 尝试更新您的 Java... 它可能会起作用。你有什么版本?另外,尝试使用 JDK 中的 jar 工具自己编译 jar。 我根本无法让编译器编译任何类,因为它一直抛出 NoClassDefFoundError,但这完全是另一个问题。我正在运行 1.7.0_09 【参考方案1】:事实证明,实际的解决方案是我将声音文件存储在 jar 中,因此我对目录的引用不起作用,因为它已经移动了目录。当声音文件被移到 jar 之外时,它会工作并读取文件并运行线程。
【讨论】:
以上是关于将内部可运行类导出到 jar(剪辑)中的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse 导出可运行 jar - 排除 javadoc 和源
我可以选择我在 Maven 依赖项中使用的唯一包来在 Eclipse 中导出可运行的 jar 吗?
我用jar file(附带MANIFEST.MF)导出jar包可以运行 但是用Runnable jar file却说找不到类