将内部可运行类导出到 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(剪辑)中的主要内容,如果未能解决你的问题,请参考以下文章

如何用maven将配置文件打在jar包外

Eclipse 导出可运行 jar - 排除 javadoc 和源

Spring Boot导出jar包发布

我可以选择我在 Maven 依赖项中使用的唯一包来在 Eclipse 中导出可运行的 jar 吗?

我用jar file(附带MANIFEST.MF)导出jar包可以运行 但是用Runnable jar file却说找不到类

Eclipse没有将最新版本导出为可运行的JAR