Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基本textField actionListener出错(命令位于侦听器中时出错)_Java_User Interface_Jframe_Actionlistener_Jtextfield - Fatal编程技术网

Java 基本textField actionListener出错(命令位于侦听器中时出错)

Java 基本textField actionListener出错(命令位于侦听器中时出错),java,user-interface,jframe,actionlistener,jtextfield,Java,User Interface,Jframe,Actionlistener,Jtextfield,当我在文本字段上按enter键时,我不断收到错误(将在下面发布错误)。我希望文本字段将数据保存到全局定义的变量中。每当我在代码中不包含“name”时,actionListener就会工作,例如,如果我输入int a=3,那么就没有错误。我还全局声明了名称(在主gui上),因为如果我没有声明,我会得到一个错误,说变量不在范围内,这可能是一个问题 //Declared inside the main gui (the others are nested in this) JTextF

当我在文本字段上按enter键时,我不断收到错误(将在下面发布错误)。我希望文本字段将数据保存到全局定义的变量中。每当我在代码中不包含“name”时,actionListener就会工作,例如,如果我输入int a=3,那么就没有错误。我还全局声明了名称(在主gui上),因为如果我没有声明,我会得到一个错误,说变量不在范围内,这可能是一个问题

    //Declared inside the main gui (the others are nested in this)
    JTextField name;
    JLabel nameLabel;

    //Name text field defined inside the gui jInternalFrame
    TextField name = new TextField("Enter Name..", 20);
    JLabel nameLabel = new JLabel();
    nameLabel.setText("Name: ");
    name.addActionListener(new nameListener());
    addRoomPanel.add(nameLabel);
    addRoomPanel.add(name);`

    //ActionListener defined outside of the text field gui
    class nameListener implements ActionListener{
        public void actionPerformed(ActionEvent e){
            nameString = name.getText();
            name.setText("saved");
            name.selectAll();
         }
    }

ERROR MESSAGE:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at InternalFrame$dobListener.actionPerformed(InternalFrame.java:445)
    at java.awt.TextField.processActionEvent(TextField.java:617)
    at java.awt.TextField.processEvent(TextField.java:585)
    at java.awt.Component.dispatchEventImpl(Component.java:4872)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
    at java.awt.EventQueue.access$300(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:706)
    at java.awt.EventQueue$3.run(EventQueue.java:704)
    at java.security.AccessController.doPrivileged(Native Method)
    at  java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.awt.EventQueue$4.run(EventQueue.java:718)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

UI的组件定义了两次。一次在GUI类中作为变量,一次在(我想)构造函数中。因此,存在名称为
name
namelab
的两个变量。构造函数将访问构造函数中声明的变量,因此GUI类的变量保持未初始化状态(
null
)。
ActionListener
访问GUI类中的变量,该变量为
null
,并抛出
NullPointerException
。你必须使用一个变量而不是两个。为了得到更准确的答案,我需要更多的代码(或者至少比上面发布的代码片段更有用)。

完美!我得到了它,谢谢,我把构造函数中的定义移到了GUI类中,它工作得非常好。