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

设置Java Swing应用程序的正确方法是什么;Gnome顶部栏中的标题是什么?,java,swing,gnome-3,Java,Swing,Gnome 3,我使用以下代码在GNOME3的顶部栏中设置Java Swing应用程序的标题。但是,当我运行它时,我会收到代码下面显示的警告。有没有更好的方法在代码中设置应用程序标题?请注意,这不是关于设置窗口本身标题的问题 try { Toolkit toolkit = Toolkit.getDefaultToolkit(); Field awtAppClassNameField = toolkit.getClass().getDeclaredField("awtAppClassName");

我使用以下代码在GNOME3的顶部栏中设置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

这是两件不同事情的副作用,通过反射使用非API接口,以及使用使用模块加载系统(在Java9中引入)的新JVM

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

很可能是您正在使用的代码和正在使用的库尚未更新,无法与默认情况下强制执行的模块系统正确工作/接口。要使旧式反射代码以向后兼容的方式访问非API入口点,需要在java启动命令中添加命令行标志
--非法访问=permit

请注意,如果同时进行运行时启动和编译器启动,则可能需要执行此操作


出于好奇,在这个平台上,
jframe.setTitle(“title”)
不起作用,还是在
setTitle
可用之前的代码库不起作用?给你的JFrame一个标题说明就足够了吗?当我使用我提供的代码时,它就起作用了。不过,它给了我这些警告。我的问题是,是否有一种方法可以设置应用程序标题,而不必求助于在未来版本的Java中可能不支持的黑客。不,在JFrame上设置标题是不够的。这些警告是从JDK9开始的。甲骨文不再允许自定义应用程序名称,而是在追求他们的开发者。Java死了。@mariusm似乎只是警告它的界面不受支持,可能是因为不能保证所有环境在其桌面环境中都显示“应用程序标题”。由于这是一个警告,而jigsaw项目(Java9)现在使API合同可以通过其模块系统强制执行,所以很有可能该应用程序是在没有允许非法模块访问的标志的情况下启动的。