在Gnome顶部栏中设置Java Swing应用程序标题的正确方法是什么?

时间:2017-11-19 23:03:39

标签: java swing gnome-3

我正在使用以下代码在Gnome 3的顶部栏中设置我的Java Swing应用程序的标题。但是,当我运行它时,我会收到代码下方显示的警告。有没有更好的方法在代码中设置应用程序标题?请注意,这不是关于设置窗口标题的问题。

try
{
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Field awtAppClassNameField = toolkit.getClass().getDeclaredField("awtAppClassName");
    awtAppClassNameField.setAccessible(true);
    awtAppClassNameField.set(toolkit, "FNDice");
}
catch (NoSuchFieldException | IllegalAccessException e)
{
    e.printStackTrace();
}

以下是我在运行应用程序时看到的警告。

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.gmail.fishnet37222.fndice.App (file:/home/dave/IdeaProjects/fndice/target/classes/) to field sun.awt.X11.XToolkit.awtAppClassName
WARNING: Please consider reporting this to the maintainers of com.gmail.fishnet37222.fndice.App
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

1 个答案:

答案 0 :(得分:0)

这是两个不同的方面的副作用,即通过反射使用非API接口,以及使用使用模块加载系统(在Java 9中引入)的新JVM

使用Java模块,JAR文件现在包含更多元数据,这些元数据涉及其他JAR文件应访问所包含代码的哪些部分。这样可以实现很多以前只有OSGI或自定义类加载器才可以实现的功能。

赔率是您正在使用的代码,并且您正在使用的库尚未更新为与模块系统正确配合/接口,该模块系统默认为强制执行。要使旧的反射代码以向后兼容的方式访问非API入口点,您需要在Java启动命令中添加命令行标志--illegal-access=permit

请注意,如果您同时进行了运行时启动和编译器启动,则都需要这样做。

出于好奇,在此平台上jframe.setTitle("title")不起作用,还是setTitle可用之前的代码库?