NoClassDefFoundError при создании пакета приложений MacOS из.jar
Я пытался решить это часами и часами. У меня есть Java-программа, которую я экспортировал как.jar. Баночка работает нормально, но я хотел а) связать ее с приложением MacOS (.app) б) включить JRE в приложение. Я использовал packr https://github.com/libgdx/packr для достижения этой цели. Однако приложение, созданное Packr, имеет некоторые проблемы. я получаю это, когда я начинаю это:
Exception in thread "Thread-1" java.lang.NoClassDefFoundError: com/sun/media/sound/JDK13Services
at javax.sound.sampled.AudioSystem.getProviders(AudioSystem.java:1629)
at javax.sound.sampled.AudioSystem.getAudioFileReaders(AudioSystem.java:1404)
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1105)
at Audio.AudioPlayer.<init>(AudioPlayer.java:11)
at GameState.MenuState.<init>(MenuState.java:45)
at GameState.GameStateManager.loadState(GameStateManager.java:51)
at GameState.GameStateManager.<init>(GameStateManager.java:46)
at Main.GamePanel.init(GamePanel.java:58)
at Main.GamePanel.run(GamePanel.java:63)
at java.lang.Thread.run(Thread.java:744)
Глядя на трассировку стека, он, по-видимому, как-то связан с аудио-вводом-выводом; это предположение также согласуется с впечатлением, что программа, кажется, работает, пока аудио не используется; но я просто не могу понять, что изменить, так как.jar работает отлично.
файл конфигурации для упаковочных пакетов выглядит так:
{
"platform": "mac",
"jdk": "/Users/.../bounces/openjdk-1.7.0-u45-unofficial-icedtea-2.4.3-macosx-x86_64-image.zip",
"executable": "Moths",
"classpath": [
"/Users/.../bounces/Moths_JRE_1.7_beadz.jar"
],
"mainclass": "Main.Game",
"vmargs": [
],
"resources": [
],
"minimizejre": "soft",
"output": "/Users/.../bounces/Moths.beadz.app",
"icon": "/Users/.../bounces/icon.icns"
}
Есть идеи?
Обновление: решение. Это не имеет ничего общего со звуковым вводом / выводом, на самом деле решение намного проще: в packr есть дополнительная подпрограмма минимизации, которая удаляет ненужные части JRE перед упаковкой, чтобы сделать пакет приложения таким маленьким, как возможный. К сожалению, com.sun.media - один из пакетов, которые были удалены. Решение: отключите опцию минимизации перед упаковкой.
1 ответ
com/sun/media/sound/JDK13Services
проживает в rt.jar
Для MacOS это называется classes.jar и находится под /System/Library/Frameworks/<java_version>/Classes
, Убедитесь, что вы включили его в classpath