Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
114 views
in Technique[技术] by (71.8m points)

java - How to wait for input in a text field?

I'm converting a console application to one that uses Swing. At the moment I want my program to do a similar thing to this .nextInt(); how can I achieve this by using .getText(); or something similar?

In short;

How can I hold the execution of the program till the user has entered something in the text field and pressed enter.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Update: So you want to wait for the user to to input something from the GUI. This is possible but needs to be synchronized since the GUI runs in another thread.

So the steps are:

  1. Create an "holder" object that deligates the result from GUI to "logic" thread
  2. The "logic" thread waits for the input (using holder.wait())
  3. When the user have entered text it synchronizes the "holder" object and gives the result + notifies the "logic" thread (with holder.notify())
  4. The "logic" thread is released from its lock and continues.

Full example:

public static void main(String... args) throws Exception {
    final List<Integer> holder = new LinkedList<Integer>();

    final JFrame frame = new JFrame("Test");

    final JTextField field = new JTextField("Enter some int + press enter");
    frame.add(field);
    field.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            synchronized (holder) {
                holder.add(Integer.parseInt(field.getText()));
                holder.notify();
            }
            frame.dispose();
        }
    });

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);

    // "logic" thread 
    synchronized (holder) {

        // wait for input from field
        while (holder.isEmpty())
            holder.wait();

        int nextInt = holder.remove(0);
        System.out.println(nextInt);
        //....
    }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...