Details
Description
If you attempt to change the icon of the Stage in an unsigned application, it throws an AccessControlException. This will cause the entire application to hang on startup.
Here is a very simple example to reproduce this:
Stage {
width: 640
height: 360
title: "Shelf Test"
icons: Image {
url: "http://jfxtras.org/portal/webdav/liferay.com/guest/document_library/Samples/JFXtrasDemo/JFXtrasShelf/images/image%%20(9).jpg"
}
}
(you will need to modify the url to be an image on the same server)
And here is the associated stack trace (fixed):
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkMemberAccess(Unknown Source)
at java.lang.Class.checkMemberAccess(Unknown Source)
at java.lang.Class.getDeclaredMethod(Unknown Source)
at com.sun.javafx.tk.swing.WindowStage.setIcons(Unknown Source)
at javafx.stage.Stage$_SBECL.onChange(Unknown Source)
at com.sun.javafx.runtime.location.SequenceVariable.notifyListeners(Unknown Source)
at com.sun.javafx.runtime.location.SequenceVariable.setAsSequence(Unknown Source)
at org.jfxtras.scene.control.ShelfTest.javafx$run$(ShelfTest.fx:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.runtime.provider.GUIRuntimeProvider$1.run(Unknown Source)
at com.sun.javafx.tk.swing.SwingToolkit$StartupRoutine.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
The only workaround is to not use Stage icons.
Here is a very simple example to reproduce this:
Stage {
width: 640
height: 360
title: "Shelf Test"
icons: Image {
url: "http://jfxtras.org/portal/webdav/liferay.com/guest/document_library/Samples/JFXtrasDemo/JFXtrasShelf/images/image%%20(9).jpg"
}
}
(you will need to modify the url to be an image on the same server)
And here is the associated stack trace (fixed):
java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkMemberAccess(Unknown Source)
at java.lang.Class.checkMemberAccess(Unknown Source)
at java.lang.Class.getDeclaredMethod(Unknown Source)
at com.sun.javafx.tk.swing.WindowStage.setIcons(Unknown Source)
at javafx.stage.Stage$_SBECL.onChange(Unknown Source)
at com.sun.javafx.runtime.location.SequenceVariable.notifyListeners(Unknown Source)
at com.sun.javafx.runtime.location.SequenceVariable.setAsSequence(Unknown Source)
at org.jfxtras.scene.control.ShelfTest.javafx$run$(ShelfTest.fx:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.runtime.provider.GUIRuntimeProvider$1.run(Unknown Source)
at com.sun.javafx.tk.swing.SwingToolkit$StartupRoutine.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
The only workaround is to not use Stage icons.
Attachments
Issue Links
- duplicates
-
JDK-8107948 Setting Stage.icons in unsigned app throws SecurityException
-
- Resolved
-
- is blocked by
-
JDK-8107948 Setting Stage.icons in unsigned app throws SecurityException
-
- Resolved
-