字体行被注释掉时,以下代码有效,并且在包含该行时根本不显示 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 花费不必要的大量时间试图找到我认为正确的字体。
删除未使用的附加字体解决了问题,现在此代码工作正常。