langerhans / multidoge

MultiDoge is a desktop Dogecoin client, powered by dogecoinj. Ported from the MultiBit Bitcoin client.
http://multidoge.org
MIT License
257 stars 110 forks source link

Support for Wayland #86

Open bagnaram opened 3 years ago

bagnaram commented 3 years ago

Currently Wayland is not supported by AWT. The application immediately crashes on non-X11 systems:

$ /tmp java -jar  multidoge-0.1.7-linux.jar
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
    at java.desktop/sun.awt.PlatformGraphicsInfo.createToolkit(PlatformGraphicsInfo.java:40)
    at java.desktop/java.awt.Toolkit.getDefaultToolkit(Toolkit.java:592)
    at java.desktop/sun.swing.SwingUtilities2.getSystemMnemonicKeyMask(SwingUtilities2.java:2212)
    at java.desktop/javax.swing.plaf.basic.BasicLookAndFeel.initComponentDefaults(BasicLookAndFeel.java:1096)
    at java.desktop/javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:440)
    at java.desktop/javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:150)
    at java.desktop/javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1560)
    at java.desktop/javax.swing.UIManager.setLookAndFeel(UIManager.java:587)
    at java.desktop/javax.swing.UIManager.setLookAndFeel(UIManager.java:629)
    at java.desktop/javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1402)
    at java.desktop/javax.swing.UIManager.initialize(UIManager.java:1515)
    at java.desktop/javax.swing.UIManager.maybeInitialize(UIManager.java:1481)
    at java.desktop/javax.swing.UIManager.getUI(UIManager.java:1054)
    at java.desktop/javax.swing.JOptionPane.updateUI(JOptionPane.java:1873)
    at java.desktop/javax.swing.JOptionPane.<init>(JOptionPane.java:1838)
    at java.desktop/javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:862)
    at java.desktop/javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:670)
    at java.desktop/javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:641)
    at com.izforge.izpack.installer.GUIInstaller.showFatalError(Unknown Source)
    at com.izforge.izpack.installer.GUIInstaller.<init>(Unknown Source)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
    at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350)
    at java.base/java.lang.Class.newInstance(Class.java:645)
    at com.izforge.izpack.installer.Installer.main(Unknown Source)

Support for headless, JavaFX or Swing can support native GTK or QT

bagnaram commented 3 years ago

I managed to get it to unpack by adding -console to the installer. The jar-exe will also fail due to X11 not being available. The log outputs at the end:

10:03:01.208 [main] DEBUG org.multibit.MultiBit - Creating user interface with initial view : WELCOME_VIEW
java.awt.HeadlessException:
No X11 DISPLAY variable was set,
but this program performed an operation which requires it.
        at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:165)
        at java.desktop/java.awt.Window.<init>(Window.java:545)
        at java.desktop/java.awt.Frame.<init>(Frame.java:423)
        at java.desktop/java.awt.Frame.<init>(Frame.java:388)
        at java.desktop/javax.swing.JFrame.<init>(JFrame.java:180)
        at org.multibit.viewsystem.swing.MultiBitFrame.<init>(MultiBitFrame.java:224)
        at org.multibit.MultiBit.main(MultiBit.java:239)
        at org.multibit.MultiBitInExecutableJar.main(MultiBitInExecutableJar.java:98)
10:03:01.233 [main] ERROR org.multibit.MultiBit - An unexpected error caused MultiBit to quit.
10:03:01.233 [main] ERROR org.multibit.MultiBit - The error was 'java.awt.HeadlessException
No X11 DISPLAY variable was set,
but this program performed an operation which requires it.'
java.awt.HeadlessException:
No X11 DISPLAY variable was set,
but this program performed an operation which requires it.
        at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:165)
        at java.desktop/java.awt.Window.<init>(Window.java:545)
        at java.desktop/java.awt.Frame.<init>(Frame.java:423)
        at java.desktop/java.awt.Frame.<init>(Frame.java:388)
        at java.desktop/javax.swing.JFrame.<init>(JFrame.java:180)
        at org.multibit.viewsystem.swing.MultiBitFrame.<init>(MultiBitFrame.java:224)
        at org.multibit.MultiBit.main(MultiBit.java:239)
        at org.multibit.MultiBitInExecutableJar.main(MultiBitInExecutableJar.java:98)
10:03:01.233 [main] ERROR org.multibit.MultiBit - Please read http://multibit.org/help_troubleshooting.html for help on troubleshooting.
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.multibit.controller.bitcoin.BitcoinController.getLocaliser()" because "this.bitcoinController" is null
        at org.multibit.viewsystem.swing.action.ExitAction.actionPerformed(ExitAction.java:80)
        at org.multibit.MultiBit.main(MultiBit.java:635)
        at org.multibit.MultiBitInExecutableJar.main(MultiBitInExecutableJar.java:98)
bagnaram commented 3 years ago

I believe this is due to being tied to the deprecated Multibit framework. https://github.com/Multibit-Legacy/multibit