Dansoftowner / Restart4j

Library for restarting your java application
Apache License 2.0
16 stars 2 forks source link

Restart works on Windows but not on Mac #1

Closed stephansann closed 3 years ago

stephansann commented 3 years ago

Hi @Dansoftowner

I tried this code both an Windows and on Mac:

                    Optional<ButtonType> tmpRestartResult =
                            dialogProvider.providePreferencesChangedAlert().showAndWait();

                    // Restart?
                    tmpRestartResult.ifPresent(aRestartButtonType -> {

                        if (ButtonType.YES == aRestartButtonType) {

                            ApplicationRestart.builder().terminationPolicy(javafx.application.Platform::exit)
                                    .build().restartApp();
                        }
                    });

Good news (or bad news - from a debugging standpoint) is that it works on Windows - the App will be restarted. On Mac I get:

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1862)
    at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1729)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.controls/javafx.scene.control.MenuItem.fire(MenuItem.java:459)
    at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1385)
    at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.lambda$createChildren$12(ContextMenuContent.java:1338)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3856)
    at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1851)
    at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2584)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
    at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
    at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
    at javafx.graphics/com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
    at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
    at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1859)
    ... 40 more
Caused by: java.lang.IllegalArgumentException: Empty command
    at java.base/java.lang.Runtime.exec(Runtime.java:410)
    at java.base/java.lang.Runtime.exec(Runtime.java:313)
    at Restart4j@1.0/com.restart4j.ApplicationRestart.restartApp(ApplicationRestart.java:65)
    at DocumentArchiver/com.sophisticatedapps.archiving.documentarchiver.controller.MenuBarController.lambda$handlePreferencesMenuItemAction$0(MenuBarController.java:128)
    at java.base/java.util.Optional.ifPresent(Optional.java:183)
    at DocumentArchiver/com.sophisticatedapps.archiving.documentarchiver.controller.MenuBarController.lambda$handlePreferencesMenuItemAction$1(MenuBarController.java:123)
    at java.base/java.util.Optional.ifPresent(Optional.java:183)
    at DocumentArchiver/com.sophisticatedapps.archiving.documentarchiver.controller.MenuBarController.handlePreferencesMenuItemAction(MenuBarController.java:105)
    ... 51 more

Please let me know if I can help you with Mac-related inputs.

Thanks and best regards Stephan

Dansoftowner commented 3 years ago

Hi @stephansann ,

Thanks for reporting this issue! I released a new version 1.1 that doesn't solve the problem but throws a more explicit exception message. Please let me know the stacktrace with this new version!

Also, I would ask you how did you run your app when this exception occured? From the IDE? If yes, please try running it from a different form (a jar for example). If the restartion succeedes/fails that way, please let me know!

Thanks and best regards Daniel

stephansann commented 3 years ago

Hi Daniel

The Stacktrace looks exactly the same - no matter if I start the app from the IDE or from the command line.

IDE:

/Library/Java/JavaVirtualMachines/jdk-11.0.10+9/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=55575:/Applications/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8 -p /Users/stephan/Developer/Java/DocumentArchiver/target/classes:/Users/stephan/.m2/repository/com/github/Dansoftowner/PDFViewerFX/0.7/PDFViewerFX-0.7.jar:/Users/stephan/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar:/Users/stephan/.m2/repository/com/github/Dansoftowner/jSystemThemeDetector/3.2/jSystemThemeDetector-3.2.jar:/Users/stephan/.m2/repository/net/java/dev/jna/jna-platform/5.6.0/jna-platform-5.6.0.jar:/Users/stephan/.m2/repository/de/jangassen/jfa/1.1.9/jfa-1.1.9.jar:/Users/stephan/.m2/repository/com/github/oshi/oshi-core/5.3.4/oshi-core-5.3.4.jar:/Users/stephan/.m2/repository/org/jetbrains/annotations/19.0.0/annotations-19.0.0.jar:/Users/stephan/.m2/repository/net/java/dev/jna/jna/5.6.0/jna-5.6.0.jar:/Users/stephan/.m2/repository/org/zwobble/mammoth/mammoth/1.4.2/mammoth-1.4.2.jar:/Users/stephan/.m2/repository/org/apache/poi/poi-scratchpad/5.0.0/poi-scratchpad-5.0.0.jar:/Users/stephan/.m2/repository/org/apache/poi/poi/5.0.0/poi-5.0.0.jar:/Users/stephan/.m2/repository/org/slf4j/jcl-over-slf4j/1.7.30/jcl-over-slf4j-1.7.30.jar:/Users/stephan/.m2/repository/commons-codec/commons-codec/1.15/commons-codec-1.15.jar:/Users/stephan/.m2/repository/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar:/Users/stephan/.m2/repository/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar:/Users/stephan/.m2/repository/com/zaxxer/SparseBitSet/1.2/SparseBitSet-1.2.jar:/Users/stephan/.m2/repository/com/github/Dansoftowner/Restart4j/1.1/Restart4j-1.1.jar:/Users/stephan/.m2/repository/org/apache/commons/commons-imaging/1.0-alpha2/commons-imaging-1.0-alpha2.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-controls/15.0.1/javafx-controls-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-controls/15.0.1/javafx-controls-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-graphics/15.0.1/javafx-graphics-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-graphics/15.0.1/javafx-graphics-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-base/15.0.1/javafx-base-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-base/15.0.1/javafx-base-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-web/15.0.1/javafx-web-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-web/15.0.1/javafx-web-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-media/15.0.1/javafx-media-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-media/15.0.1/javafx-media-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-fxml/15.0.1/javafx-fxml-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-fxml/15.0.1/javafx-fxml-15.0.1-mac.jar -m DocumentArchiver/com.sophisticatedapps.archiving.documentarchiver.App
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1862)
    at javafx.fxml/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1729)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.controls/javafx.scene.control.MenuItem.fire(MenuItem.java:459)
    at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1385)
    at javafx.controls/com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.lambda$createChildren$12(ContextMenuContent.java:1338)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at javafx.base/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at javafx.base/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Scene$MouseHandler.process(Scene.java:3856)
    at javafx.graphics/javafx.scene.Scene.processMouseEvent(Scene.java:1851)
    at javafx.graphics/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2584)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
    at javafx.graphics/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
    at javafx.graphics/com.sun.glass.ui.View.handleMouseEvent(View.java:556)
    at javafx.graphics/com.sun.glass.ui.View.notifyMouse(View.java:942)
    at javafx.graphics/com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
    at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
    at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
    at javafx.fxml/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857)
    ... 40 more
Caused by: com.restart4j.RestartException: Couldn't retrieve command-line (it's empty or null)
    at Restart4j@1.1/com.restart4j.ApplicationRestart.getCommandLine(ApplicationRestart.java:83)
    at Restart4j@1.1/com.restart4j.ApplicationRestart.restartApp(ApplicationRestart.java:65)
    at DocumentArchiver/com.sophisticatedapps.archiving.documentarchiver.controller.MenuBarController.handleChangeLanguageMenuItemAction(MenuBarController.java:212)
    ... 51 more

Command line:

myMac2014:target stephan$ java -jar document-archiver-1.6.0-SNAPSHOT-with-dependencies.jar 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1862)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1729)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.control.MenuItem.fire(MenuItem.java:459)
    at com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.doSelect(ContextMenuContent.java:1385)
    at com.sun.javafx.scene.control.ContextMenuContent$MenuItemContainer.lambda$createChildren$12(ContextMenuContent.java:1338)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3856)
    at javafx.scene.Scene.processMouseEvent(Scene.java:1851)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2584)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:556)
    at com.sun.glass.ui.View.notifyMouse(View.java:942)
    at com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273)
    at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1857)
    ... 40 more
Caused by: com.restart4j.RestartException: Couldn't retrieve command-line (it's empty or null)
    at com.restart4j.ApplicationRestart.getCommandLine(ApplicationRestart.java:83)
    at com.restart4j.ApplicationRestart.restartApp(ApplicationRestart.java:65)
    at com.sophisticatedapps.archiving.documentarchiver.controller.MenuBarController.handleChangeLanguageMenuItemAction(MenuBarController.java:212)
    ... 52 more
Dansoftowner commented 3 years ago

I updated some dependencies in version 1.2. If the problem is still present, let me know!

stephansann commented 3 years ago

Thanks for the update. It would be good if you could also update jSystemThemeDetector then.

Otherwise one runs into a dependency-hell when using both libraries.

First I faced this:

[INFO] +- com.github.Dansoftowner:Restart4j:jar:1.2:compile
[INFO] |  +- (org.slf4j:slf4j-api:jar:1.7.30:compile - scope updated from runtime; omitted for duplicate)
[INFO] |  +- (com.github.oshi:oshi-core:jar:5.7.1:runtime - omitted for conflict with 5.3.4)
[INFO] |  \- (org.jetbrains:annotations:jar:19.0.0:runtime - omitted for duplicate)

After excluding version 5.3.4 I ran into the next conflict:

[INFO] |  +- (org.slf4j:slf4j-api:jar:1.7.30:compile - scope updated from runtime; omitted for duplicate)
[INFO] |  +- com.github.oshi:oshi-core:jar:5.7.1:runtime
[INFO] |  |  +- (net.java.dev.jna:jna:jar:5.8.0:runtime - omitted for conflict with 5.6.0)
[INFO] |  |  +- (net.java.dev.jna:jna-platform:jar:5.8.0:runtime - omitted for conflict with 5.6.0)
[INFO] |  |  \- (org.slf4j:slf4j-api:jar:1.7.30:runtime - omitted for duplicate)
[INFO] |  \- (org.jetbrains:annotations:jar:19.0.0:runtime - omitted for duplicate)

Instead of going further down the rabbit hole I decided to include Restart4J into another project which doesn't use jSystemThemeDetector.

There I triggered the restart and the application exited. Anyhow I didn't came back up. This is what I found:

Java has been detached already, but someone is still trying to use it at -[GlassViewDelegate dealloc]:/Users/jenkins/workspace/OpenJFX-skara-mac/modules/javafx.graphics/src/main/native-glass/mac/GlassViewDelegate.m:204
0   libglass.dylib                      0x00000001135ebe6d -[GlassViewDelegate dealloc] + 221
1   libglass.dylib                      0x00000001135f18f6 -[GlassView3D dealloc] + 246
2   libobjc.A.dylib                     0x00007fff203a439d _ZN19AutoreleasePoolPage12releaseUntilEPP11objc_object + 167
3   libobjc.A.dylib                     0x00007fff2038733e objc_autoreleasePoolPop + 161
4   CoreFoundation                      0x00007fff205dfdad __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
5   CoreFoundation                      0x00007fff205dfc3d __CFRunLoopDoObservers + 549
6   CoreFoundation                      0x00007fff205df0ed __CFRunLoopRun + 838
7   CoreFoundation                      0x00007fff205de6ce CFRunLoopRunSpecific + 563
8   libjli.dylib                        0x000000010774b65b CreateExecutionEnvironment + 398
9   libjli.dylib                        0x000000010774786a JLI_Launch + 1322
10  java                                0x0000000107735807 main + 375
11  libdyld.dylib                       0x00007fff20503621 start + 1
12  ???                                 0x0000000000000007 0x0 + 7

Process finished with exit code 0
Dansoftowner commented 3 years ago

Hi @stephansann ,

I've updated jSystemThemeDetector, check version 3.3.

Also, I would ask you to test this code:

ApplicationRestart.builder()
                    .modifyCmd(cmd -> {
                        Platform.exit();
                        try {
                            Runtime.getRuntime().exec(cmd);
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                        System.exit(0);
                        return cmd;
                    })
                    .build().restartApp(); 

Please let me know that it worked/failed!

Thanks and best regards Daniel

stephansann commented 3 years ago

Hi again

Thanks for the update of jSystemThemeDetector, but there are still dependency problems:

[INFO] com.sophisticatedapps.archiving:document-archiver:jar:1.6.0-SNAPSHOT
[INFO] +- com.github.Dansoftowner:PDFViewerFX:jar:0.8:compile
[INFO] |  \- (org.slf4j:slf4j-api:jar:1.7.30:compile - scope updated from runtime; omitted for duplicate)
[INFO] +- com.github.Dansoftowner:jSystemThemeDetector:jar:3.3:compile
[INFO] |  +- (org.slf4j:slf4j-api:jar:1.7.30:runtime - omitted for duplicate)
[INFO] |  +- (net.java.dev.jna:jna:jar:5.6.0:runtime - omitted for duplicate)
[INFO] |  +- net.java.dev.jna:jna-platform:jar:5.6.0:runtime
[INFO] |  |  \- (net.java.dev.jna:jna:jar:5.6.0:runtime - omitted for duplicate)
[INFO] |  +- de.jangassen:jfa:jar:1.1.9:runtime
[INFO] |  |  \- (net.java.dev.jna:jna:jar:5.6.0:runtime - omitted for duplicate)
[INFO] |  +- com.github.oshi:oshi-core:jar:5.7.1:runtime
[INFO] |  |  +- (net.java.dev.jna:jna:jar:5.8.0:runtime - omitted for conflict with 5.6.0)
[INFO] |  |  +- (net.java.dev.jna:jna-platform:jar:5.8.0:runtime - omitted for conflict with 5.6.0)
[INFO] |  |  \- (org.slf4j:slf4j-api:jar:1.7.30:runtime - omitted for duplicate)
[INFO] |  \- org.jetbrains:annotations:jar:19.0.0:runtime
[INFO] +- net.java.dev.jna:jna:jar:5.6.0:compile
[INFO] +- org.zwobble.mammoth:mammoth:jar:1.4.2:compile
[INFO] +- org.apache.poi:poi-scratchpad:jar:5.0.0:compile
[INFO] |  \- org.apache.poi:poi:jar:5.0.0:compile
[INFO] |     +- org.slf4j:slf4j-api:jar:1.7.30:compile
[INFO] |     +- org.slf4j:jcl-over-slf4j:jar:1.7.30:compile
[INFO] |     |  \- (org.slf4j:slf4j-api:jar:1.7.30:compile - omitted for duplicate)
[INFO] |     +- commons-codec:commons-codec:jar:1.15:compile
[INFO] |     +- org.apache.commons:commons-collections4:jar:4.4:compile
[INFO] |     +- org.apache.commons:commons-math3:jar:3.6.1:compile
[INFO] |     \- com.zaxxer:SparseBitSet:jar:1.2:compile
[INFO] +- com.github.Dansoftowner:Restart4j:jar:1.2:compile
[INFO] |  +- (org.slf4j:slf4j-api:jar:1.7.30:compile - scope updated from runtime; omitted for duplicate)
[INFO] |  +- (com.github.oshi:oshi-core:jar:5.7.1:runtime - omitted for duplicate)
[INFO] |  \- (org.jetbrains:annotations:jar:19.0.0:runtime - omitted for duplicate)
[INFO] +- org.apache.commons:commons-imaging:jar:1.0-alpha2:compile

oshi-core 5.7.1 would like to use jna 5.8.0, while jSystemDetector would like to use jna 5.6.0.

I included the code into my class and found no output on stdout. The application is terminated, but never comes back up.

With debugging I found that the "return cmd;" is never reached:

Screen Shot 2021-04-19 at 13 05 07

cmd:

/Library/Java/JavaVirtualMachines/jdk-11.0.10+9/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51533,suspend=y,server=n -javaagent:/Users/stephan/Library/Caches/JetBrains/IdeaIC2021.1/captureAgent/debugger-agent.jar -Dfile.encoding=UTF-8 -classpath /Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar -p /Users/stephan/Developer/Java/ArchiveBrowser/target/classes:/Users/stephan/.m2/repository/com/sophisticatedapps/archiving/document-archiver/1.3.0-SNAPSHOT/document-archiver-1.3.0-SNAPSHOT.jar:/Users/stephan/.m2/repository/com/github/Dansoftowner/PDFViewerFX/0.7/PDFViewerFX-0.7.jar:/Users/stephan/.m2/repository/org/apache/commons/commons-imaging/1.0-alpha2/commons-imaging-1.0-alpha2.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-controls/15.0.1/javafx-controls-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-controls/15.0.1/javafx-controls-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-graphics/15.0.1/javafx-graphics-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-graphics/15.0.1/javafx-graphics-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-base/15.0.1/javafx-base-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-base/15.0.1/javafx-base-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-web/15.0.1/javafx-web-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-web/15.0.1/javafx-web-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-media/15.0.1/javafx-media-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-media/15.0.1/javafx-media-15.0.1-mac.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-fxml/15.0.1/javafx-fxml-15.0.1.jar:/Users/stephan/.m2/repository/org/openjfx/javafx-fxml/15.0.1/javafx-fxml-15.0.1-mac.jar:/Users/stephan/.m2/repository/com/github/Dansoftowner/Restart4j/1.2/Restart4j-1.2.jar:/Users/stephan/.m2/repository/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar:/Users/stephan/.m2/repository/com/github/oshi/oshi-core/5.7.1/oshi-core-5.7.1.jar:/Users/stephan/.m2/repository/net/java/dev/jna/jna/5.8.0/jna-5.8.0.jar:/Users/stephan/.m2/repository/net/java/dev/jna/jna-platform/5.8.0/jna-platform-5.8.0.jar:/Users/stephan/.m2/repository/org/jetbrains/annotations/19.0.0/annotations-19.0.0.jar -m ArchiveBrowser/com.sophisticatedapps.archiving.archivebrowser.App
Dansoftowner commented 3 years ago

Yes, I know that. But It's just a test and I want(ed) to figure out something :)

Dansoftowner commented 3 years ago

If you copy that cmd and run it in your terminal, what's the result?

stephansann commented 3 years ago

That was doomed to fail, since the cmd was "built" for a debugging session. So this:

ERROR: transport error 202: connect failed: Connection refused
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [./src/jdk.jdwp.agent/share/native/libjdwp/debugInit.c:735]

BUT: I decided to include a System.out.println(cmd); and run it from the command line.

Now I got this...

/usr/bin/java -jar archive-browser-1.0-SNAPSHOT-with-dependencies.jar

... and the application restarted πŸ™‚

Only downside at the moment: The new Application window will be put behind the the terminal window, so normally you may not even notice there is a new Window. But is has to be found out how it would behave if started in another way.

Dansoftowner commented 3 years ago

Thanks! So If you run this code:

ApplicationRestart.builder()
                    .modifyCmd(cmd -> {
                        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
                            try {
                                Runtime.getRuntime().exec(cmd);
                            } catch (IOException ex) {
                                ex.printStackTrace();
                            }
                        }));
                        Platform.exit();
                        System.exit(0);
                        return cmd;
                    })
                    .build().restartApp();

Any difference? Thanks for your patience :)

stephansann commented 3 years ago

Now a very odd behavior. First time I start the app and trigger the restart, it will be restarted in the foreground :-) Second time it will be restarted "behind" the terminal window.

stephansann commented 3 years ago

It restarted when started as JAR.

Dansoftowner commented 3 years ago

Oh okay, so in that case this code worked:

ApplicationRestart.builder()
                    .modifyCmd(cmd -> {
                        Platform.exit();
                        try {
                            Runtime.getRuntime().exec(cmd);
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                        System.exit(0);
                        return cmd;
                    })
                    .build().restartApp(); 

?

Dansoftowner commented 3 years ago

Or you are saying that the command pasted into the terminal worked? Sorry, I'm a bit confused πŸ˜…

Dansoftowner commented 3 years ago

So here is my conclusion (please correct me if I'm wrong):

When you use this code:

ApplicationRestart.builder()
                    .modifyCmd(cmd -> {
                        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
                            try {
                                Runtime.getRuntime().exec(cmd);
                            } catch (IOException ex) {
                                ex.printStackTrace();
                            }
                        }));
                        Platform.exit();
                        System.exit(0);
                        return cmd;
                    })
                    .build().restartApp();

, the application restarts itself correctly, when it was run as a Jar.

And your problem is that sometimes the window will be behind the terminal.

Thanks very much for your patience!πŸ˜…

stephansann commented 3 years ago

Yes, you understood 100 % correct πŸ‘πŸ»

Dansoftowner commented 3 years ago

OK, thanks for your helpfulness! Now hopefully I can fix the problem in the next release.

I think the window-problem can be solved with something like this:

//after you shown the stage
Platform.runLater(() -> yourStage.toFront());
Dansoftowner commented 3 years ago

Check version 1.3!

But now use the normal code:

ApplicationRestart.builder().build().restartApp()

Please tell me if it works/fails now! Thanks for everything

stephansann commented 3 years ago

We are failing better ☺️

Now, after installing via install4j, I get this:

Exception in thread "Thread-5" com.restart4j.RestartException: Couldn't execute the starter command with the OS
    at com.restart4j.ApplicationRestart.lambda$buildNewProcessCreation$4(ApplicationRestart.java:76)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.io.IOException: Cannot run program "/Applications/Document": error=2, No such file or directory
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
    at java.base/java.lang.Runtime.exec(Runtime.java:592)
    at java.base/java.lang.Runtime.exec(Runtime.java:416)
    at java.base/java.lang.Runtime.exec(Runtime.java:313)
    at com.restart4j.ApplicationRestart.lambda$buildNewProcessCreation$4(ApplicationRestart.java:74)
    ... 1 more
Caused by: java.io.IOException: error=2, No such file or directory
    at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
    at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340)
    at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
    ... 6 more

I guess this should be easy to fix. The Cannot run program "/Applications/Document" tells me the code seems to have a problem with spaces in directory names.

Directory name in this case is:

myMac2014:Document Archiver stephan$ pwd
/Applications/Document Archiver
Dansoftowner commented 3 years ago

Version 1.4.1 released, check it out!

I think it will solve the problem.

stephansann commented 3 years ago

πŸ‘πŸ»πŸ‘πŸ»πŸ‘πŸ»

Now it works for Mac, Linux and Windows - even with the installed version πŸ‘πŸ»

Thanks for the great work πŸ™πŸ»

(If you like you can add Document Archiver to the projects using Restart4J πŸ™ƒ)

Dansoftowner commented 3 years ago

Hi @stephansann ,

I'm so happy I could fix this problem :) And thanks again for your help.

I mentioned Document Archiver in Restart4j's README

Best regards Daniel