Я пытался решить это в течение нескольких часов и часов. У меня есть java-программа, которую я экспортировал как .jar. Ящик работает отлично, но я хотел a) связать его с приложением MacOS (.app) b) включить JRE в приложение. Для этого я использовал packr https://github.com/libgdx/packr. однако приложение, сделанное пакером, имеет некоторые проблемы. Я получаю это, когда я его запускаю:NoClassDefFoundError при создании пакета приложений MacOS от .jar
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)
, глядя на трассировку стека, он, по-видимому, имеет какое-то отношение к аудио IO; это предположение также согласуется с впечатлением, что программа, похоже, работает до тех пор, пока не будет использован звук; но я просто не могу понять, что изменить, поскольку .jar работает отлично.
конфигурационный файл для packr loooks как это:
{
"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"
}
Любые идеи?
Update: Решение Это не имеет ничего общего с аудио I/O, на самом деле решение гораздо проще: packr имеет дополнительную минимизирующую процедуру, которая удаляет ненужные части JRE перед упаковкой его для того, чтобы сделайте пакет приложений как можно меньше. К сожалению, com.sun.media является одним из пакетов, которые удалены. Решение: отключите параметр минимизации перед упаковкой.
ОК, поэтому на Mac класс JDK13Services находится в /System/Library/Frameworks//Classes/classes.jar, тогда как в JRE, включенном в приложение , он находится в /lib/rt.jar. –
MrCandlelLight
Извините, я не хочу публиковать сообщение :(... как я могу сообщить своему приложению, чтобы загрузить его из /lib/rt.jar? Или я полностью потерял вашу точку. – MrCandlelLight