Mihael Keehl
Mihael Keehl

Reputation: 355

Java Swing Textfield Error

I'm new to Java and Java Swing, and I can't get it to work. I have 2 textfields, and the text in textfield1 needs to be passed on te textfield2 by clicking a button, but it crashes constantly.

Here is the code:

package javaapplication7;

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


public class JavaApplication7 {

    public static void main(String[] args) {
        JFrame theFrame = new JFrame();
        theFrame.setTitle("Title");
        theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        theFrame.setSize(400, 400);
        theFrame.setLocation(400, 400);

        theFrame.setContentPane(new Paneel());
        theFrame.setVisible(true);
    }
}

class Paneel extends JPanel{
            JButton button1;
            JTextField field1;
            JTextField field2;


    public Paneel(){
            JButton button1 = new JButton("Click");
            button1.addActionListener(new KH());
            add(button1);

            JTextField field1 = new JTextField(10);
            add(field1);

            JTextField field2 = new JTextField(10);
            add(field2);
    }


    class KH implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            field2.setText(field1.getText());
        }
    }
}

It gives an enormous list of errors when I run it, has someone any idea?

Error list:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javaapplication7.Paneel$KH.actionPerformed(JavaApplication7.java:54)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:688)
    at java.awt.EventQueue$3.run(EventQueue.java:686)
    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:702)
    at java.awt.EventQueue$4.run(EventQueue.java:700)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
    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)

Upvotes: 1

Views: 3770

Answers (3)

Reimeus
Reimeus

Reputation: 159774

You are currently shadowing the variables button1, field1, field2 in Paneel, i.e. you are creating local instances of these components in the constructor of Paneel but the class member variables with these names remain null, resulting in the NPE.

By removing the JButton and JTextField type keywords you will assign the components to the intended class member variables:

public Paneel(){
   button1 = new JButton("Click");
   ...
   field1 = new JTextField(10);
   ...
   field2 = new JTextField(10);
   ...
}

Upvotes: 3

Vishal K
Vishal K

Reputation: 13066

Use this code for Paneel constructor indeed.

        public Paneel(){
        JButton button1 = new JButton("Click");
        button1.addActionListener(new KH());
        add(button1);

        field1 = new JTextField(10);
        add(field1);

        field2 = new JTextField(10);
        add(field2);
       }

field1 and field2 that you have created in your constructor is local to constructor. The member fields (field1 and field2) of Paneel class is still null. So in actionPerformed it is throwing NullPointerException.

Upvotes: 2

Paul Tomblin
Paul Tomblin

Reputation: 182782

You declare new local "button1", "field1" and "field2" variables inside your constructor instead of initializing the instance variables.

Upvotes: 2

Related Questions