我正在开发一个聊天客户端/服务器。在客户端,我有一个名为 的类ClientGui
和一个名为InputPane
extends的子类JPanel
。ClientGui
处理与 GUI 相关的客户端事物的主要部分,但InputPane
只处理来自用户的输入。
NullPointerException
尝试在课堂上的InputPane
对象中设置字体时,我总是感到奇怪。ClientGui
这是我的一些代码:
public ClientGui() {
// configure JFrame
this.serverOutput = new JTextPane();
this.input = new InputPane();
// configure JScrollPane
// configure other objects
// various set up methods
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(input, BorderLayout.PAGE_END);
}
如您所见,input
对象正在被初始化。这是它的构造函数:
public InputPane() {
this.inputField = new JTextField();
this.send = new JButton("Send");
// set size
this.setFont(getFont());
// various methods
// add components
}
当我尝试设置字体时,它会抛出一个NullPointerException
. 通过各种println()
电话,我能够发现inputField
并且send
是空的。我尝试将println()
方法放入构造函数中,但没有一个被调用(和/或打印)。
我对此感到非常困惑。如果有人能给出解释,那将有很大帮助。谢谢你。
编辑:这里是 StackTrace:
Exception in thread "main" java.lang.NullPointerException
at net.dean.tcp.client.gui.ClientGui$InputPane.setFont(ClientGui.java:518)
at javax.swing.LookAndFeel.installColorsAndFont(Unknown Source)
at javax.swing.plaf.basic.BasicPanelUI.installDefaults(Unknown Source)
at javax.swing.plaf.basic.BasicPanelUI.installUI(Unknown Source)
at javax.swing.JComponent.setUI(Unknown Source)
at javax.swing.JPanel.setUI(Unknown Source)
at javax.swing.JPanel.updateUI(Unknown Source)
at javax.swing.JPanel.<init>(Unknown Source)
at javax.swing.JPanel.<init>(Unknown Source)
at javax.swing.JPanel.<init>(Unknown Source)
at net.dean.tcp.client.gui.ClientGui$InputPane.<init>(ClientGui.java:496)
at net.dean.tcp.client.gui.ClientGui.<init>(ClientGui.java:138)
at net.dean.tcp.client.gui.ClientGui.main(ClientGui.java:44)
编辑2:这是ClientGui$InputPane.setFont(Font)
方法:
public void setFont(Font f) {
super.setFont(f);
inputField.setFont(f);
send.setFont(f);
Dimension size = getSizeFromFont();
// Dimension based on getFont()'s height
send.setPreferredSize(size);
inputField.setPreferredSize(size);
}