【发布时间】:2015-11-16 12:58:23
【问题描述】:
我注意到 Java 为 root 用户和非 root 用户提供了不同的外观类。我试图了解如何使 LAF 保持一致。此外,即使在用户/root 中也是不一致的:取决于用户/root 的登录方式:
示例代码(编译打包在laf.jar):
import javax.swing.UIManager;
public class laf {
public static void main(java.lang.String[] args) {
try {
System.out.print(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
}
}
场景 1 以普通用户身份登录机器(在 GUI 模式下)
示例输出(作为用户)
[xxx@yyy Downloads]$ java -classpath laf.jar laf
com.sun.java.swing.plaf.gtk.GTKLookAndFeel
示例输出(通过su切换到root)
[root@yyy Downloads]# java -classpath ./laf.jar laf
javax.swing.plaf.metal.MetalLookAndFeel
场景 2 以 root 身份登录机器(在 GUI 模式下)
示例输出(作为 root)
[root@yyy Downloads]# java -classpath ./laf.jar laf
com.sun.java.swing.plaf.gtk.GTKLookAndFeel
场景 3 以普通用户身份通过 SSH 登录机器(类似于上面的场景 #1,但在本例中 - 相同的 LAF)
示例输出(作为用户)
[xxx@yyy Downloads]$ java -classpath laf.jar laf
javax.swing.plaf.metal.MetalLookAndFeel
示例输出(切换到 root)
[root@yyy Downloads]# java -classpath ./laf.jar laf
javax.swing.plaf.metal.MetalLookAndFeel
软件版本:
[root@yyy Downloads]# java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build pxa6470sr9fp10-20150708_01(SR9 FP10))
IBM J9 VM (build 2.6, JRE 1.7.0 Linux amd64-64 Compressed References 20150701_255667 (JIT enabled, AOT enabled)
J9VM - R26_Java726_SR9_20150701_0050_B255667
JIT - tr.r11_20150626_95120.01
GC - R26_Java726_SR9_20150701_0050_B255667_CMPRSS
J9CL - 20150701_255667)
JCL - 20150628_01 based on Oracle jdk7u85-b15
[root@yyy Downloads]# cat /etc/redhat-release
Red Hat Enterprise Linux Workstation release 6.7 (Santiago)
【问题讨论】:
-
这可能来自于用户环境的不同;试试看
env在不同场景下的结果,或者在Java中,使用System.getenv()的结果。 -
您能否在各种设置中检查您的环境中是否有变量
GNOME_DESKTOP_SESSION_ID? -
1) 作为用户它说“this-is-depriated” 2) 在“su -”作为 root 之后它给出了空白输出
-
如果您想要一致的跨平台外观,您可能需要坚持使用Nimbus theme 或
UIManager.getCrossPlatformLookAndFeelClassName()。 -
Nimbus 是为了更好看的跨平台 L&F 而创建的,但无论出于何种原因,它从未更新为默认值。
标签: java linux redhat look-and-feel