【发布时间】:2018-05-03 03:18:34
【问题描述】:
我正在使用以下代码在 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
【问题讨论】:
-
它不起作用?给你的 JFrame 一个标题就够了吗?
-
当我使用我提供的代码时它可以工作。不过,它给了我这些警告。我的问题是,是否有一种方法可以设置应用程序标题,而无需求助于未来版本的 Java 可能不支持的黑客攻击。不,在 JFrame 上设置标题是不够的。
-
这些警告从 JDK9 开始。甲骨文不再允许自定义应用程序名称,而是追随他们的开发人员。 Java 已死。
-
@mariusm 似乎只是警告它不受支持的界面,可能是因为不能保证所有环境在其桌面环境中都显示“应用程序标题”。由于这是一个警告,并且 Project jigsaw (Java 9) 现在可以通过其模块系统强制执行 API 合同,因此该应用程序启动时可能没有允许非法模块访问的标志。