2016-10-14 2 views
1

Я пытался решить это в течение нескольких часов и часов. У меня есть 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 является одним из пакетов, которые удалены. Решение: отключите параметр минимизации перед упаковкой.

ответ

0

com/sun/media/sound/JDK13Services проживает в rt.jar Для MacOS это называется classes.jar и находится под /System/Library/Frameworks/<java_version>/Classes. Убедитесь, что вы включили его в путь к классам

+0

ОК, поэтому на Mac класс JDK13Services находится в /System/Library/Frameworks//Classes/classes.jar, тогда как в JRE, включенном в приложение , он находится в /lib/rt.jar. – MrCandlelLight

+0

Извините, я не хочу публиковать сообщение :(... как я могу сообщить своему приложению, чтобы загрузить его из /lib/rt.jar? Или я полностью потерял вашу точку. – MrCandlelLight