1

以下代码在字体行被注释掉时有效,并且在包含该行时根本不出现 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 显示关闭)。

4

2 回答 2

1

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

一些建议:

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

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

进一步阅读:Swing 中的并发

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

content.add(new JScrollPane(jta));
于 2013-09-13T15:42:57.287 回答
0

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

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

于 2013-09-13T19:13:50.960 回答