-2
JTextField player1Text = new JTextField();
player1Text.setSize(400, 400);
inputWindow.add(player1Text);
System.out.println(player1Text.getText().length());

This will print zero, even though I enter some text in the textbox that appears in the window. However,

JTextField player1Text = new JTextField("input");
player1Text.setSize(400, 400);
inputWindow.add(player1Text);
System.out.println(player1Text.getText().length());

This will print 5 because thats the length of "input". What can I do to get the actual input text?

EDIT: This is my whole code right now. I get a nullpointer exception whenever I run it.

public class NamesInterface extends JFrame implements ActionListener {

    Player player1;
    Player player2;
    JTextField player1Text; 
    JTextField player2Text;
    JButton startButton = new JButton("Start");

    public NamesInterface() throws UnexpectedFormatException, IOException {

        super();
        setSize(500, 1000);
        setLayout(new BorderLayout());
        setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        JPanel inputWindow = new JPanel();

        inputWindow.setSize(500, 200);
        inputWindow.setLayout(new GridLayout(3, 1));

        inputWindow.add(new JLabel("Enter Player 1 name:"));
        JTextField player1Text = new JTextField();
        player1Text.setSize(400, 400);
        inputWindow.add(player1Text);

        inputWindow.add(new JLabel("Enter Player 2 name:"));
        JTextField player2Text = new JTextField();
        player2Text.setSize(400, 400);
        inputWindow.add(player2Text);

        startButton.setSize(500, 500);
        startButton.addActionListener(this);
        inputWindow.add(startButton);

        this.add(inputWindow, BorderLayout.CENTER);



        this.validate();

    }

    @Override
    public void actionPerformed(ActionEvent e){

        if (e.getSource() == startButton) {

            System.out.println(player1Text.getText());
            System.out.println(player2Text.getText());

            System.exit(0);
        }
    }

Exceptions thrown:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at eg.edu.guc.yugioh.gui.NamesInterface.actionPerformed(NamesInterface.java:64)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    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:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3322)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:702)
    at java.awt.EventQueue$3.run(EventQueue.java:696)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:724)
    at java.awt.EventQueue$4.run(EventQueue.java:722)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
ninesalt
  • 4,054
  • 5
  • 35
  • 75

2 Answers2

1

The reason for this is that you are not telling the program to wait for text to be entered into the TextField, rather you are getting the text you are initializing the TextField too.

Your answer to this will be one of 2 things:

Create a KeyListener on the TextField that will either listen for the Enter key being pressed then print out the Text or print out the text concurrent to the Text being entered,

Or

Create a button that has a ActionPerformed function that will get the text that was entered in the field.

Also please note that based on what you are showing us; there is no code that'd going to get the Length of the text! The second snippet would simply Print out "input" to console.

In order to get the length you have to state "inputBox.length();"

UPDATE

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

public class NamesInterface extends JFrame{

    JTextField player1Text; 
    JTextField player2Text;
    Player player1;
    Player player2;
    JButton startButton;

    public NamesInterface(){

        super();
        setSize(500, 1000);
        setLayout(new BorderLayout());

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        JPanel inputWindow = new JPanel();

        inputWindow.setSize(500, 200);
        inputWindow.setLayout(new GridLayout(3, 1));

        inputWindow.add(new JLabel("Enter Player 1 name:"));
        JTextField player1Text = new JTextField();
        player1Text.setSize(400, 400);
        inputWindow.add(player1Text);

        inputWindow.add(new JLabel("Enter Player 2 name:"));
        JTextField player2Text = new JTextField();
        player2Text.setSize(400, 400);
        inputWindow.add(player2Text);

        startButton  = new JButton("Start");
        startButton.setSize(500, 500);
        startButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e){
                System.out.println(player1Text.getText());
                System.out.println(player2Text.getText());
            }
        });
        inputWindow.add(startButton);

        this.add(inputWindow, BorderLayout.CENTER);
        setVisible(true);
    }
}

Hope this helps.

Let me know of the outcome.

TejjD
  • 2,571
  • 1
  • 17
  • 37
  • Can you please add your StackTrace or Error, to the question, so we can see on which line it is occurring :) – TejjD Apr 19 '15 at 20:00
  • @Swailem95... Please have a look at my answer again. I have updated and tested it. It works :) Let me know if it does for you. – TejjD Apr 19 '15 at 20:23
  • Yeah, I figured out my mistake before looking at your solution. Thanks though! – ninesalt Apr 19 '15 at 20:29
1

Are you printing the text after the user hits a button, like "Submit"? As far as I know, you need to create some sort of action so that the program knows when to get the text you have entered. Once you've done that, use player1Text.getText() and print the text.

button.addActionListener(new ActionListener() {
      public void actionPerfomed(ActionEvent ae){
         //get your text data from here
  }
Kick Buttowski
  • 6,709
  • 13
  • 37
  • 58
wellington
  • 471
  • 1
  • 7
  • 19