0

Java アプリケーションを作成しましたが、次の例外が発生しました。

Exception in thread "main" java.lang.NullPointerException
    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at javax.swing.JFrame.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at Executer.<init>(Executer.java:21)
    at Executer.main(Executer.java:14 

コードは次のとおりです。

import javax.swing.*;
import java.awt.*;

public class Executer {

private JLabel lblCommand;
private JTextField txtEnter;
private JButton btNext, btPrevious;
private JPanel panel;

public static void main(String[] args) {
    new Executer();
}
public Executer() {
    JFrame frame = new JFrame("Execute Script");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(900,400);
    frame.setVisible(true);
    frame.add(panel); 
    frame.setVisible(true);
    MyPanel();
    Text();
    Buttons();
    Fields();
}
public void MyPanel() {
    panel = new JPanel();
    panel.setLayout(null);
}
public void Text(){
    lblCommand = new JLabel("Enter Here");
    lblCommand.setBounds(135, 50, 150, 20);
    Font styleOne = new Font("Arial", Font.BOLD, 13);
    lblCommand.setFont(styleOne);
    panel.add(lblCommand);
}

public void Fields () {
    txtEnter = new JTextField();
    txtEnter.setBounds(210, 50, 150, 20);
    panel.add(txtEnter);
}
public void Buttons() {
    btNext = new JButton ("Next");
    btNext.setBounds(380,325,100,20);
    panel.add(btNext);

    btPrevious = new JButton ("Previous");
    btPrevious.setBounds(260,325,100,20);
    panel.add(btPrevious);
}}

NullPointerException とは何ですか? どうすればわかりますか?

4

4 に答える 4

6

panel追加する前にインスタンス化する必要があります。を呼び出す前に panel を使用するとMyPanel()panelはまだnullであるため、NullPointerException.

あなたがここにいる間、これを一瞥してください。http://geosoft.no/development/javastyle.html

Java のメソッド名は、小文字で始まる大文字と小文字を混在させる必要があります (例:myPanel()の代わりに) MyPanel()。私たちのほとんどにMyPanel()とって、不適切なスタイルを設定したため、一見コンストラクターのように見えます。

さらに、MyPanelTextFields、およびButtonsは、外部クラスがそれらを呼び出すのは不適切であるため、すべてプライベート メソッドにする必要があります。

于 2013-07-28T22:37:59.840 に答える
1

他の人が言ったように、JFrame に追加する前に JPanel を作成する必要があります。実際、通常、JPanel 内にもすべてのコンポーネントを作成する必要があります。通話を次の場所に移動することをお勧めします

Text();
Buttons();
Fields();

を呼び出す前に、ExecuterコンストラクターからMyPanel()メソッドと呼び出しに。MyPanel()frame.add(panel);

また、二度電話する必要はありませんframe.setVisible(true);。また、 をLayoutManager呼び出すのではなく、を使用する必要がありますpanel.setLayout(null);Layout Manager の使用については、Oracle のチュートリアルを参照してください。

于 2013-07-28T22:50:19.507 に答える
1

この行の問題frame.add(panel);Panel はその時点で初期化されていませんMyPanel();。追加する前にこの行を移動して初期化してください。

于 2013-07-28T22:39:00.020 に答える
0

はい、JPanel のオブジェクトを作成する前にフレームにパネルを追加しています。とにかく、コンストラクターを次のように変更します。

public Executer() {
        JFrame frame = new JFrame("Execute Script");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(900, 400);

        MyPanel();
        Text();
        Buttons();
        Fields();

        frame.add(panel);
        frame.setVisible(true);

    }

ありがとう。

于 2013-12-12T10:35:06.990 に答える