我正在使用JTattoo来更改我的应用程序LookAndFeel。我知道如何设置任何可用的皮肤,但现在我希望用户能够选择其中任何一个。带有LAF的字符串保存在文件中,因此每次运行程序时,都应该读取此文件并根据您的选择设置皮肤。
我已经在GUI之前出现了一个JDialogBox,只是为了显示该文件是否已被正确读取,而且它是。
这是有效的:
UIManager.setLookAndFeel("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel");
但这不是:
UIManager.setLookAndFeel(chooseSkin());
有什么想法吗?
PS:文件中的字符串是正确的,我已经检查了一百万次,我用引号试了一下,没有它们......我不知道现在该做什么
修改 的 注意,没有名为chooseSkin()的方法,它只是一个简单的引用,真正的方法叫做readFile()
Skins.java
public static String readFile() {
String content = "";
File file = new File("skins.txt");
try {
FileReader reader = new FileReader(file);
char[] chars = new char[(int) file.length()];
reader.read(chars);
content = new String(chars);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(content); // ---> returns: "com.jtattoo.plaf.aluminium.AluminiumLookAndFeel"
return content;
}
Main.java
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
System.out.println(Skins.readFile() =="com.jtattoo.plaf.aluminium.AluminiumLookAndFeel"); // ---> returns false
UIManager.setLookAndFeel(Skins.readFile());
MainGUI frame = new MainGUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
答案 0 :(得分:1)
嗯,文件中可能有额外的空格或新行或其他内容,有很多调试提示,比如打印字符串的长度。
String laf = "com.jtattoo.plaf.aluminium.AluminiumLookAndFeel";
System.out.println(Skins.readFile().length() + " , " + laf.length())
如果长度不一样,则需要确保正确写入文件。它最后可能包含换行符“\ n”。
有一种名为'equals'的方法,它将严格比较字符序列。例如:
Skins.readFile().equals("com.jtattoo.plaf.aluminium.AluminiumLookAndFeel")
应该返回true。
UIManager也会抛出异常吗? (例如,java.lang.ClassNotFoundException)如果它无法加载LookAndFeel,它应该抛出异常。如果仍然无法让它工作,请尝试使用:
Skins.readFile().intern();
将根据'equals'方法返回等于它的字符串。 (字符序列相等的地方)
答案 1 :(得分:0)
Chooseskin必须返回一个字符串,该字符串等于存在的有效外观类的有效路径,例如“com.etc ... AluminiumLookAndFeel”。您需要检查读取文件的代码以及字符串是否为valud。用于此的调试器或println csn br。