Java 空指针辅助。

Java 空指针辅助。,java,nullpointerexception,Java,Nullpointerexception,首先,我已经研究了空指针的含义,我已经阅读了下面的内容,但我仍然完全迷茫 我的错误是 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at EBIAlarmUI$2.alarm1ButtonActionPerformed(EBIAlarmUI.java:113) at EBIAlarmUI$2.actionPerformed(EBIAlarmUI.java:109) 这就是导致它的代码 alarm1B

首先,我已经研究了空指针的含义,我已经阅读了下面的内容,但我仍然完全迷茫

我的错误是

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at EBIAlarmUI$2.alarm1ButtonActionPerformed(EBIAlarmUI.java:113)
at EBIAlarmUI$2.actionPerformed(EBIAlarmUI.java:109)
这就是导致它的代码

alarm1Button = new JButton();
    alarm1Button.setText("Alarm 1");
    GridBagConstraints gbc_alarm1Button = new GridBagConstraints();
    gbc_alarm1Button.insets = new Insets(0, 0, 5, 0);
    gbc_alarm1Button.gridx = 9;
    gbc_alarm1Button.gridy = 2;
    getContentPane().add(alarm1Button, gbc_alarm1Button);

    alarm1Button.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            alarm1ButtonActionPerformed(evt);
        }
        public synchronized void alarm1ButtonActionPerformed(
                java.awt.event.ActionEvent evt) {
            resultsTextArea.setText("Alarm 1 Activated, String: " + alarm1);

            try {
                byte[] b = alarm1.getBytes("ASCII");

                TwoWaySerialComm.SerialWriter sw = new 
    TwoWaySerialComm.SerialWriter(
                        twoWaySerCom.serialPort.getOutputStream());

                sw.out.write(b);
            } catch (IOException e) {
                // Do something to handle the exception
                e.printStackTrace();
            }
        }
    });
特别是这两条线

alarm1ButtonActionPerformed(evt);

在我从GroupLayout转到GridBag布局之前,精确的代码在几个小时前就已经运行了

那么resultsTextArea或alarm1是否为空?我不明白怎么会这样。它们出现在我的GUI中

JTextArea resultsTextArea = new JTextArea();
    GridBagConstraints gbc_resultsTextArea = new GridBagConstraints();
    gbc_resultsTextArea.gridwidth = 3;
    gbc_resultsTextArea.fill = GridBagConstraints.BOTH;
    gbc_resultsTextArea.gridx = 7;
    gbc_resultsTextArea.gridy = 7;
    getContentPane().add(resultsTextArea, gbc_resultsTextArea);
我甚至尝试将它们添加到我的变量声明中

public javax.swing.JTextArea resultsTextArea;
public javax.swing.JTextArea customStringTextArea;
public javax.swing.JButton alarm1Button;
String alarm1 = "$81,$01,$06,$01,$10,$10,$03,$01,$FF";
String alarm2 = "*993R03,67,6#";
String alarm3 = "*994R14,67,1#";

resultsTextArea
null
。它是
null
,因为您正在隐藏变量

首先,您将清除一个实例字段

public javax.swing.JTextArea resultsTextArea;
但是当你初始化它时,你正在创建一个本地版本

JTextArea resultsTextArea = new JTextArea();
这意味着当您尝试从
ActionListener
引用实例字段时,它是
null

删除第二个减容

//JTextArea resultsTextArea = new JTextArea();
resultsTextArea = new JTextArea();     

您可以使用java.util.Optional如果您经常使用Java1.8版本,我知道我现在哪里出了问题。我刚刚开始在Netbeans上使用Eclipse,因为很多教程都在使用它。我注意到,当我重新启动Eclipse时,许多问题似乎都消失了。这是发生在你身上的事情吗?我不使用Eclipse,我使用Netbeans。但您可能会发现,两者使用的缓存往往与实际发生的情况不同步,需要定期“清理”。
//JTextArea resultsTextArea = new JTextArea();
resultsTextArea = new JTextArea();