Using java.awt.Toolkit.getDefaultToolkit().getScreenSize() reflectively causes InaccessibleObjectException
Phil Race
philip.race at oracle.com
Thu Jan 5 19:22:45 UTC 2017
This should be discussed on jigsaw-dev.
But can you share your code ? - since the following works for me :
import java.awt.Toolkit;
public class TK {
public static void main(String args[]) throws Exception {
Toolkit tk = Toolkit.getDefaultToolkit();
Class tkc = Class.forName("java.awt.Toolkit");
java.lang.reflect.Method m = tkc.getMethod("getScreenSize");
System.out.println(m.invoke(tk));
}
}
~/jdk9b142/bin/java TK
java.awt.Dimension[width=1920,height=1200]
-phil.
On 01/05/2017 11:03 AM, Rony G. Flatscher wrote:
> Experimenting with further scripts indicates that this is a systematic problem whenever the official
> APIs return members that are not made available to an unnamed module: e.g. JavaFX some
> "com.sun.javafx.collections.VetoableListDecorator" or in a "plain" awt/swing app some
> "sun.java2d.SungGraphics2D".
>
> ---rony
>
> On 05.01.2017 19:42, Rony G. Flatscher wrote:
>> Trying to run a program that gets the screen dimensions using
>> java.awt.Toolkit.getDefaultToolkit().getScreenSize() reflectively.
>>
>> On a 64-bit Ubuntu the returned Toolkit is of type sun.awt.X11.XToolkit. Reflectively invoking its
>> method getScreenSize() causes the following exception to be thrown on 9-ea+134:
>>
>> java.lang.reflect.InaccessibleObjectException: unable to make member of class sun.awt.SunToolkit
>> accessible: module java.desktop does not export sun.awt to unnamed module ...
>>
>> A little bit baffled as this is from a script that has been working flawlessly throughout more than
>> a decade on various Java versions and which employs documented public methods only (the sun.awt
>> object is returned by java.awt.Toolkit). Is this a known "legacy"problem :) that I could circumvent
>> somehow or a bug that needs to be reported?
>>
>> ---rony
>>
More information about the jigsaw-dev
mailing list