Rony mentioned "the returned Toolkit is of type sun.awt.X11.XToolkit"
which suggests that he is calling getClass() on the result of
getDefaultToolkit(), and then reflecting further on that Class object
and its Methods. As has been discussed previously on jigsaw-dev, this
won't work for implementation classes; it's necessary to reflect over
exported classes and interfaces instead.
Alex
On 1/5/2017 11:22 AM, Phil Race wrote:
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