【问题标题】:Why "toString" give different results corresponding to JFrame and System.out.println?为什么“toString”对应JFrame和System.out.println给出不同的结果?
【发布时间】:2021-10-04 05:44:12
【问题描述】:

当我有带有俄语字母的文件时,它们看起来像JFrame 的标题。但是当我尝试在控制台中打印它们时,它会显示问题图标。有人可以解释为什么会这样吗?并且可能有人有更简单的方法在俄语上制作标题。

public class Main {
public static void main(String[] args){
    File file = new File("1.txt");
    try {
        file.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
    StringBuilder result = new StringBuilder();
    try (InputStreamReader reader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8)){
        int a = reader.read();
        while(a!=-1){
            result.append((char)a);
            a = reader.read();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    JFrame frame = new JFrame(result.toString());
    frame.setVisible(true);
    frame.setSize(500, 500);

    System.out.println(result.toString());
}
}

【问题讨论】:

  • 我认为控制台只支持非特殊字符。这可能就是原因。
  • 问题是控制台使用的字体不支持这些字符。控制台与应用程序的用户无关,所以我看不出这有多重要。

标签: java swing jframe tostring


【解决方案1】:

这不是您的代码的问题,而是控制台的“问题”。控制台不知道您的俄语字符是什么意思,所以它会打印问号。另一方面,JFrame 知道俄语符号,并且能够打印它们。

【讨论】:

  • 感谢您的帮助。但也许您也知道将俄语字母放入 Frame 的更简单方法?我用这种方法填满了自己的坏处
猜你喜欢
  • 2016-04-11
  • 2017-04-29
  • 2021-12-07
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
相关资源
最近更新 更多