ErikaRedmark / monkey-shines-java-port

Port to Java of abandoned classic Mac OS game "Monkey Shines" by Fantasoft
GNU General Public License v3.0
19 stars 1 forks source link

Java error when loading levels #97

Open jeanguyomarch opened 3 years ago

jeanguyomarch commented 3 years ago

Hi, first, thanks a lot for this port of Monkey Shines :)

I could actually run the v1.0.0 but encountered issues when trying to run (on Arch Linux) the latest versions (I've tried v.1.2.0 and v.1.1.1 with the same errors).

DISCLAIMER: I'm not familiar at all with the java world; maybe this is just a rookie mistake.

I've downloaded the .zip file from the latest release; after decompressing (and renaming), I end up with the MS/ directory, as follows:

MS
|-- MS\ Level\ Editor.exe
|-- Monkey\ Shines.exe
`-- data
    |-- Monkey\ Shines-all.jar
    |-- OpenAL32.dll
    |-- OpenAL64.dll
    |-- jinput-dx8.dll
    |-- jinput-dx8_64.dll
    |-- jinput-raw.dll
    |-- jinput-raw_64.dll
    |-- libjinput-linux.so
    |-- libjinput-linux64.so
    |-- libjinput-osx.dylib
    |-- liblwjgl.dylib
    |-- liblwjgl.so
    |-- liblwjgl64.so
    |-- libopenal.so
    |-- libopenal64.so
    |-- lwjgl.dll
    |-- lwjgl64.dll
    |-- monkeyshines.log
    |-- monkeyshines.pref
    `-- openal.dylib

I then run the following:

$ cd MS/data
$ java -cp Monkey\ Shines-all.jar org.erikaredmark.monkeyshines.MonkeyShines -Djava.library.path=.
Binary Location: /home/jean/Downloads/MS/data/Monkey Shines-all.jar
WARNING: Could not open configuration file. Dropping to defaults.
Reason: /home/jean/Downloads/MS/data/Monkey Shines-all.jar/logging.properties: Not a directory
File handler set up. Output is to console and 'monkeyshines.log'
Log level for system is INFO
Jan 03, 2021 11:01:57 PM org.erikaredmark.monkeyshines.logging.MonkeyShinesLog initialise
INFO: Monkey Shines Java Port Log File Initialised

At this point, I can see the main screen and interact with the buttons. When I select a level (let's say Spooky), nothing visible happens (I have the animation that I indeed clicked the level button, but that's all), and the following log is displayed:

Calculation of 100 got a gain of -10.081904349041679
Decibel offset for sound: -10.081904
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no lwjgl64 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
    at java.lang.Runtime.loadLibrary0(Runtime.java:871)
    at java.lang.System.loadLibrary(System.java:1124)
    at org.lwjgl.Sys$1.run(Sys.java:72)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
    at org.lwjgl.Sys.loadLibrary(Sys.java:87)
    at org.lwjgl.Sys.<clinit>(Sys.java:117)
    at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
    at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36)
    at org.erikaredmark.monkeyshines.play.SlickMonkeyShinesStart.startMonkeyShines(SlickMonkeyShinesStart.java:45)
    at org.erikaredmark.monkeyshines.menu.MainWindow$GameState$1$1.worldSelected(MainWindow.java:184)
    at org.erikaredmark.monkeyshines.menu.SelectAWorld$1.actionPerformed(SelectAWorld.java:109)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6539)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6304)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:733)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

I can see that liblwjgl64.so is present in the data/ directory (my current working directory), and I expected this file to be used. I've changed -Djava.library.path=. by replacing . with the absolute path, but it did not appear to have any effect. I've seen that others encounter this problem with lwjgl but did not want to attempt to touch the java code (no reason). Another stack overflow post hinted me towards modifying the environment variable LD_LIBRARY_PATH, which I did. However, I then have a different error when selecting the level:

Calculation of 100 got a gain of -10.081904349041679
Decibel offset for sound: -10.081904
Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
    at org.newdawn.slick.AppGameContainer$1.run(AppGameContainer.java:39)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.newdawn.slick.AppGameContainer.<clinit>(AppGameContainer.java:36)
    at org.erikaredmark.monkeyshines.play.SlickMonkeyShinesStart.startMonkeyShines(SlickMonkeyShinesStart.java:45)
    at org.erikaredmark.monkeyshines.menu.MainWindow$GameState$1$1.worldSelected(MainWindow.java:184)
    at org.erikaredmark.monkeyshines.menu.SelectAWorld$1.actionPerformed(SelectAWorld.java:109)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6539)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6304)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:733)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at org.lwjgl.opengl.LinuxDisplay.getAvailableDisplayModes(LinuxDisplay.java:951)
    at org.lwjgl.opengl.LinuxDisplay.init(LinuxDisplay.java:738)
    at org.lwjgl.opengl.Display.<clinit>(Display.java:138)
    ... 42 more

but since I felt like hacking the system, I probably deserved it.

I'll try investigate a bit on my own, but since I've very limited knowledge on java, any help would be greatly appreciated :)

For some additional context, I'm running Monkey Shines within a systemd container, which is quite an exotic setup. I've installed the Arch Linux package jre8-openjdk, and below is my version of java:

$ java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)