Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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 如何在文本字段中等待输入?_Java_Applet - Fatal编程技术网

Java 如何在文本字段中等待输入?

Java 如何在文本字段中等待输入?,java,applet,Java,Applet,我正在将控制台应用程序转换为使用Swing的应用程序。目前,我希望我的程序执行与此类似的操作.nextInt()如何使用.getText()实现这一点或类似的东西 简言之 如何保持程序的执行,直到用户在文本字段中输入内容并按enter键。更新:,因此您希望等待用户从GUI输入内容。这是可能的,但需要同步,因为GUI在另一个线程中运行 因此,这些步骤是: 创建一个“holder”对象,将结果从GUI导出到“logic”线程 “逻辑”线程等待输入(使用holder.wait()) 当用户输入文本时,

我正在将控制台应用程序转换为使用Swing的应用程序。目前,我希望我的程序执行与此类似的操作
.nextInt()如何使用
.getText()实现这一点或类似的东西

简言之


如何保持程序的执行,直到用户在文本字段中输入内容并按enter键。

更新:,因此您希望等待用户从GUI输入内容。这是可能的,但需要同步,因为GUI在另一个线程中运行

因此,这些步骤是:

  • 创建一个“holder”对象,将结果从GUI导出到“logic”线程
  • “逻辑”线程等待输入(使用
    holder.wait()
  • 当用户输入文本时,它同步“holder”对象并给出结果+通知“logic”线程(使用
    holder.notify()
  • “逻辑”线程从其锁中释放并继续

  • 完整示例:

    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);
            //....
        }
    }
    
    publicstaticvoidmain(String…args)引发异常{
    最终列表持有者=新的LinkedList();
    最终JFrame=新JFrame(“测试”);
    最终JTextField=newjtextfield(“输入一些整数+按Enter键”);
    帧。添加(字段);
    field.addActionListener(新ActionListener(){
    @凌驾
    已执行的公共无效操作(操作事件e){
    同步(保持架){
    add(Integer.parseInt(field.getText());
    holder.notify();
    }
    frame.dispose();
    }
    });
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
    //“逻辑”线程
    同步(保持架){
    //等待来自字段的输入
    while(holder.isEmpty())
    holder.wait();
    int nextInt=支架。移除(0);
    系统输出打印项次(nextInt);
    //....
    }
    }
    
    控制台应用程序和GUI应用程序在行为上有很大不同。控制台应用程序从命令行参数获取输入,或等待用户从键盘输入,而GUI应用程序由事件机制驱动以执行任务


    例如,将TextField对象添加到框架中,并将keyListener添加到文本字段对象中。当键事件被通知时,将调用侦听器。有很多例子,例如,官方java示例仍然不理解这个问题-您所说的“保持执行”是什么意思?除此之外:阅读基本的Swing教程和textfield的api文档(提示:setAction可能值得一看:-)@DCON我不知道为什么这么多年前我要这么做,但我很高兴我(希望以前)的无能帮助了某人。如果有帮助,我甚至不知道为什么我在6个月前这么做!