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