私はチャットクライアント/サーバーに取り組んでいます。クライアントには、 と呼ばれるクラスと、を拡張ClientGui
する と呼ばれるサブクラスがあります。GUI関連のクライアントの主要部分を処理しますが、ユーザーからの入力のみを処理します。InputPane
JPanel
ClientGui
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
. いろいろ電話をかけた結果、andが nullprintln()
であることを知ることができました。コンストラクターにメソッドを入れようとしましたが、呼び出された (および/または出力された) ものはありませんでした。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)
EDIT 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);
}