将字体应用于 JTextArea 会使 gui 崩溃



字体行被注释掉时,以下代码有效,并且在包含该行时根本不显示 GUI。据我所知,它的格式正确,但它使 GUI 崩溃。什么原因可能导致这种情况?

public class TestCode extends JFrame{
JTextArea jta;
public TestCode(){
    setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    JPanel content = new JPanel();
    jta = new JTextArea(20, 30);
    jta.setFont(new Font("Courier New", Font.PLAIN, 12));  // This line crashes
    content.add(jta);
    add(content);         
    pack();
    setVisible(true);
}
public static void main (String [] args){
    TestCode run = new TestCode();
    }
}

我开始怀疑它与我的系统字体有关?我安装了额外的字体,也许这会影响 Java 检索它们的能力?

编辑:

澄清一下,运行此程序时没有错误。GUI 永远不会打开,IDE 变得缓慢且错误,就好像我在运行无限循环一样。必须通过 IDE 终止程序(因为没有显示要关闭的 GUI)。

使用 1.6 和 1.7 对我来说效果很好。

一些建议:

1) 强制 Swing 应用程序的 EDT,如下所示:

public static void main(String[] args)
{ 
  SwingUtilities.invokeLater(new Runnable()
  {
    public void run()
    {
      TestCode run = new TestCode();
    }
  });
}

延伸阅读:摇摆中的同意

2) 将 JTextArea 放在 JScrollPane 中,然后将滚动窗格添加到面板,而不是文本区域本身:

content.add(new JScrollPane(jta));

该问题是由我的系统上下载的字体过多引起的。我之前下载了一个字体包,其中包含几千种额外的字体,这导致 IDE 花费不必要的大量时间试图找到我认为正确的字体。

删除未使用的附加字体解决了问题,现在此代码工作正常。

最新更新