1

コードの目的: 2 つのボタン (button1 と button2) を作成します。ユーザーがボタン 1 をクリックすると、ボタン 2 のテキストが変更されます。ユーザーがボタン 2 をクリックすると、ボタン 1 のテキストが変更されます。

私が使用しているコードは次のとおりです。

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

public class multiAL {
JButton button1;
JButton button2;
JFrame frame;
public static void main(String[] args) {
    multiAL setterAL = new multiAL();
    setterAL.go();
}

public void go() {
    button1 =  new JButton("Click me, I'm One");
    button2 =  new JButton("Click me, I'm Two");
    frame.setSize(500,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(BorderLayout.WEST, button1);
    frame.getContentPane().add(BorderLayout.EAST, button2);
    frame.setVisible(true);
    button1.addActionListener(new b1L());
    button2.addActionListener(new b2L());
}

class b1L implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        button2.setText("What??, you clicked 1??");
    }
}

class b2L implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        button1.setText("What??, you clicked 2??");
    }
  }
}

完全にコンパイルされますが、実行すると次のエラーが表示されます。 Exception in thread "main" java.lang.NullPointerException at multiAL.go(multiAL.java:17) at multiAL.main(multiAL.java:11)

これまで、コンパイル時エラーのみに遭遇しました。そこで、私が聞きたい質問が 2 つあります。

1) コードの何が問題になっていますか? 2) 実行時エラーを追跡する方法は?

4

5 に答える 5

3

あなたのフレーム オブジェクトは null だと思います。初期化されることはありません。ランタイム例外を読み取ることができます。それは言うmultiAL.java:17

これは、17 行目で NullpointerException を取得することを意味します。

于 2010-07-12T10:01:05.027 に答える
2

しかし、どこにある

frame = new JFrame();

コード行?フレームがnullなので何も起こらないのではないでしょうか...

于 2010-07-12T10:00:10.497 に答える
2

frameは初期化されていないため、解決され、オブジェクトのnullメソッドを呼び出すことはできません。null初期化したように、また初期button1button2する必要がありますframe

frame = new JFrame();
于 2010-07-12T10:00:34.743 に答える
1

最初に使用する前にフレームを初期化します。

frame = new JFrame();
于 2010-07-12T10:03:15.860 に答える
0

Java クラスの命名規則に従うようにクラスの名前を変更することを検討してください: CamelCase ( http://en.wikipedia.org/wiki/CamelCase )

そして、他のユーザーが指摘したように、フレームオブジェクトが初期化されていないという問題があります。

フレーム オブジェクトを最初に使用する前に、次の行を追加します。

frame = new JFrame();
frame.setSize(500,500);
于 2010-07-12T10:03:09.297 に答える