Using java.awt.Toolkit.getDefaultToolkit().getScreenSize() reflectively causes InaccessibleObjectException

Phil Race philip.race at
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");

~/jdk9b142/bin/java TK


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