当我开始使用 JDK6 编程时,我对 文本组件 没有任何问题,无论是在 AWT 还是在 Swing 中。
但是对于 AWT 组件 的标签或标题我确实有问题。我无法在 AWT 组件上显示波斯语字符(在 Swing 中我将它们输入到源代码中)。
这是我的示例代码:
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.util.Properties;
public class EmptyFarsiCharsOnAWT extends JFrame{
public EmptyFarsiCharsOnAWT() {
super("مثال");
setDefaultCloseOperation(3);
setVisible(rootPaneCheckingEnabled);
}
public static void main(String[] args) throws AWTException, IOException {
JFrame jFrame = new EmptyFarsiCharsOnAWT();
MenuItem show ;
// approach 1 = HardCoding :
/*
show = new MenuItem("\u0646\u0645\u0627\u06cc\u0634");
*
*/
// approach 2 = using simple utf-8 saved text file :
/*
BufferedReader in = new BufferedReader(new FileReader("farsiLabels.txt"));
String showLabel = in.readLine();
in.close();
show = new MenuItem(showLabel);
*
*/
// approach 3 = using properties file :
FileReader in = new FileReader("farsiLabels.properties");
Properties farsiLabels = new Properties();
farsiLabels.load(in);
show = new MenuItem(farsiLabels.getProperty("tray.show"));
PopupMenu popUp = new PopupMenu();
popUp.add(show);
// creating Tray object
Image iconIamge = Toolkit.getDefaultToolkit().getImage("greenIcon.png");
TrayIcon trayIcon = new TrayIcon(iconIamge, null, popUp);
SystemTray tray = SystemTray.getSystemTray();
tray.add(trayIcon);
jFrame.setIconImage(iconIamge);
}
}
这三种方法在使用 IDE 运行时都有效,但是当我制作包含此类的 JAR(通过 NetBeans > 项目 > 清理和构建)时,我没有看到预期的字符(它显示空/空白方 block )!
注意:
似乎我无法附加任何东西,所以文本文件的内容将是这样的:نمایش
和属性文件的内容:
#Sun May 02 09:45:10 IRDT 2010
tray.show=نمایش
而且我想我必须让你知道我不久前在 SDN 上发布了这个问题。以及“Java Ranch”论坛和其他本地论坛,我还在等待......
顺便说一句,我使用的是最新版本的 Netbeans IDE...
如果有人能解决这些该死的 AWT 组件从不为我呈现任何波斯语字符的问题...
最佳答案
我怀疑这与平台有关。您的示例似乎可以在我的平台上使用 Netbeans 或命令行中的方法 1;我没有尝试其他方法。
在默认字符编码方面,IDE 和命令行之间可能存在差异。我注意到 NetBeans、Eclipse 和许多控制台可以设置为平台默认设置以外的设置。这是要检查的代码:
System.out.println(System.getProperty("file.encoding"));
System.out.println(Charset.defaultCharset().name());
你可能会看看这个相关的question ,也是。
附录:注意 show
字符串更改为与 JFrame
标题相匹配以进行比较。标题和菜单在 NetBeans 的 Run > Run Project
以及这些命令行中看起来是一样的:
$ java -cp build/classes EmptyFarsiCharsOnAWT $ java -jar dist/test6.jar
import javax.swing.*;
import java.awt.*;
import java.io.*;
public class EmptyFarsiCharsOnAWT extends JFrame{
public EmptyFarsiCharsOnAWT() {
super("مثال");
setDefaultCloseOperation(3);
setVisible(rootPaneCheckingEnabled);
}
public static void main(String[] args) throws AWTException, IOException {
JFrame jFrame = new EmptyFarsiCharsOnAWT();
MenuItem show ;
// approach 1 = HardCoding :
show = new MenuItem("\u0645\u062b\u0627\u0644");
PopupMenu popUp = new PopupMenu();
popUp.add(show);
// creating Tray object
Image iconIamge = Toolkit.getDefaultToolkit().getImage("image.jpg");
TrayIcon trayIcon = new TrayIcon(iconIamge, null, popUp);
SystemTray tray = SystemTray.getSystemTray();
tray.add(trayIcon);
jFrame.setIconImage(iconIamge);
}
}
关于java - AWT 上格式错误的波斯语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2933799/