Java-апплет NullPointerException - PullRequest
       7

Java-апплет NullPointerException

0 голосов
/ 08 апреля 2011

Я работаю над Апплетом, в котором есть JButton, который я хочу использовать для включения другого JButton. Однако, когда я нажимаю кнопку, я получаю ошибку: Исключение в потоке «AWT-EventQueue-1» java.lang.NullPointerException. Почему это происходит? Кажется, что когда я запускаю апплет, глобальные переменные не создаются (то есть все они равны нулю). В другой программе все работает нормально, и я не могу найти различий между ними в плане реализации этого действия.

Вот немного моего кода:

public class implementation2 extends Applet implements ActionListener {
  private static final long serialVersionUID = -4370650602318597069L;
  ...
  public JButton coreButton, testButton;
  ...
  public void init() {
    ...
    final JButton testButton = new JButton("Test);
    testButton.addActionListener(this);
    ...
    final JButton coreButton = new JButton("CORE");
    coreButton.addActionListener(this);
    coreButton.setEnabled(false);
    ...
  }
  ...
  public void actionPerformed(final ActionEvent event) {

  if(event.getActionCommand() == "Test") {
    coreButton.setEnabled(false);
  }
  ...

Если кто-нибудь может указать мне направление исправления моего кода, это будет с благодарностью! Спасибо!

Ответы [ 3 ]

1 голос
/ 08 апреля 2011

Когда вы объявляете их глобальными, зачем снова объявлять их в init() в init (), просто пишите:

 public void init() {
    ...
    testButton = new JButton("Test");
    testButton.addActionListener(this);
    ...
    coreButton = new JButton("CORE");
    coreButton.addActionListener(this);
    coreButton.setEnabled(false);
    ...
  }

Возможные ошибки в вашем коде:

public class implementation2 extends Applet implements ActionListener {
  private static final long serialVersionUID = -4370650602318597069L;
  ...
  public JButton coreButton, testButton;
  ...
  public void init() {
    ...
    final JButton testButton = new JButton("Test);  //---- Duplicate declaration which should not be done.
    //---- Forgot to write `"` to finish `Test` string
    testButton.addActionListener(this);
    ...
    final JButton coreButton = new JButton("CORE");  //---- Duplicate declaration which should not be done.
    coreButton.addActionListener(this);
    coreButton.setEnabled(false);
    ...
  }
  ...
  public void actionPerformed(final ActionEvent event) {

  if(event.getActionCommand() == "Test") { //--- use `.equals()` instead of `==`
    coreButton.setEnabled(false); //---- set it to `true` instead of `false`.
  }
1 голос
/ 08 апреля 2011

Это проблема:

public JButton coreButton, testButton;

public void init() {
  final JButton testButton = new JButton("Test);

Здесь вы создали переменную local , которая затеняет переменную instance для testButton (и то же самоедля coreButton).Это означает, что переменные экземпляра по-прежнему равны нулю - поэтому, когда вы попытаетесь разыменовать их позже, вы получите исключение.Вы не хотите объявлять новые локальные переменные в init - вы просто хотите присвоить значения переменным экземпляра.Исправленный код:

public class Implementation2 extends Applet implements ActionListener {
  private static final long serialVersionUID = -4370650602318597069L;
  ...
  public JButton coreButton, testButton;
  ...
  public void init() {
    ...
    testButton = new JButton("Test");
    testButton.addActionListener(this);
    ...
    coreButton = new JButton("CORE");
    coreButton.addActionListener(this);
    coreButton.setEnabled(false);
    ...
  }
  ...
  public void actionPerformed(final ActionEvent event) {
    if("Test".equals(event.getActionCommand())) {
      coreButton.setEnabled(false);
    }
    ...
  }
}
0 голосов
/ 08 апреля 2011

В init () вы создаете 2 локальные кнопки, которые скрывают внешние, поэтому они остаются нулевыми после init ().

...