java - 在 Swing 中按下按钮之前阻止流程继续进行

标签 java multithreading swing constructor

我想创建一个简单的 Swing 表单来接收用户的输入。棘手的部分是我希望表单的构造函数停止程序流程,直到用户点击按钮。例如:

public static void main(String[] args) {
    JOptionPane.showMessageDialog(null, "Hello, please enter your name");
    String name = new Input().getText();
    JOptionPane.showMessageDialog(null, "Hello " + name);
}

我希望流程在调用 getText() 方法之前在 Input 的构造函数内停止,直到用户点击构造函数生成的 Swing 表单上调用 ActionListener 的按钮为止。

这是输入代码:

import java.awt.BorderLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;

public class Input extends JFrame{
private static final long serialVersionUID = 1L;

private String text;
private JPanel panel;
private JTextArea textArea;
private JButton button;

public Input(){
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    panel = new JPanel();
    panel.setLayout(new BorderLayout(3,3));
    textArea = new JTextArea(5,10);
    button = new JButton("submit");
    button.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            setText(textArea.getText());

        }
    });     
    panel.add(textArea, BorderLayout.CENTER);
    panel.add(button, BorderLayout.PAGE_END);
    textArea.setSize(1500, 1500);
    add(panel);
    pack();
    setVisible(true);
}

public synchronized String getText() {
    while(text==null)
        try {
            this.wait();
        } catch (InterruptedException e) {}
    try {

        return text;
    } finally {
        dispose();
    }
}

public synchronized void setText(String text) {
    this.text = text;
    notifyAll();
}

}

我的感觉是,构造函数需要做的是以某种方式获取主程序正在运行的线程的锁,并且仅在从 ActionListener 调用 setText() 方法时释放它,但是我不知道该怎么做。

非常感谢!!!

最佳答案

您可以尝试在ActionListener中进行进一步处理:

@Override
public void actionPerformed(ActionEvent arg0) {
   String name = textArea.getText();
   // ans so on, and then:
   JOptionPane.showMessageDialog(null, "Hello " + name);
}

关于java - 在 Swing 中按下按钮之前阻止流程继续进行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21423642/

相关文章:

java - 如何卡住滚动 Pane 内的 JTable 行选择

java - 如何从另一个来源访问 url?即使存在 Access-Control-Allow-* header ,预检请求也会返回 401

java - 如何在我的 Android 应用程序中更改(线程的)堆栈大小?

java - 删除,然后在表上插入数据而不关闭程序并再次运行

java - Swing游戏布局问题

java - Jlabel、Jtextfield、Jbutton 没有立即显示在 GUI 中我很生气

c++ - 发布获取语义以计算平均值

c - 为信号量定义变量

r - Julia 调用中的 Threads.nthreads

java - 显示 JButton 图像和类之间的通信