Java 等待TextField输入,然后继续执行代码

Java 等待TextField输入,然后继续执行代码,java,Java,我有一个图形用户界面,它有一个TextField,我的代码如下所示: int port = 0; try{ port = Integer.parseInt(frame.textfieldInput.getText()); } catch(NumberFormatException npe) { System.out.println("Error! parse exception"); } System.out.printl

我有一个图形用户界面,它有一个
TextField
,我的代码如下所示:

int port = 0;
    try{
    port = Integer.parseInt(frame.textfieldInput.getText());
    }
    catch(NumberFormatException npe)
    {
        System.out.println("Error! parse exception");
    }

    System.out.println("The Port is " + port); //is 0
while(frame.value.equalsIgnoreCase(""))
{
    try
    {
        System.out.println("waiting...");
        Thread.sleep(1000);
    }
    catch(InterruptedException ie)
    {
    System.out.println("interrupted");
    }
}
我必须将值“0”分配给端口,否则代码将无法编译,因为变量将无法初始化

因为
TextField
在程序开始时是空的,
getText()
不会获得值,这就是端口保持为“0”的原因


有没有办法在代码继续之前等待输入?

找到了解决方案,我就是这样解决的:

我在我的
ActionListener
之外创建了一个全局变量:

public String value = "";
public void createInput() {
    buttonInput.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            value = textfieldInput.getText();

        }

    });
}
命名为“值”

在我的
publicstaticvoidmain(String[]args)
中,我声明了以下内容:

int port = 0;
    try{
    port = Integer.parseInt(frame.textfieldInput.getText());
    }
    catch(NumberFormatException npe)
    {
        System.out.println("Error! parse exception");
    }

    System.out.println("The Port is " + port); //is 0
while(frame.value.equalsIgnoreCase(""))
{
    try
    {
        System.out.println("waiting...");
        Thread.sleep(1000);
    }
    catch(InterruptedException ie)
    {
    System.out.println("interrupted");
    }
}
每次使用变量“value”时,我都必须清除它,这样它就可以再次为空,以备将来使用


这不是解决这个问题的最佳方法,但它对我很有效。

下面的代码可能会让您了解如何更有效地利用focus lost

JFrame frame = new JFrame();
frame.setSize(50, 50);
TextField field = new TextField();
field.addFocusListener(new FocusListener() {

    @Override
    public void focusLost(FocusEvent e) {
        // continue from here
        System.out.println(field.getText());
    }

    @Override
    public void focusGained(FocusEvent e) {
        // TODO Auto-generated method stub

    }
});
frame.getContentPane().add(field);
frame.setVisible(true);

您可以将代码放入一个侦听器,该侦听器对文本字段的更改或按钮单击等进行操作。或者调用一个模式对话框(
JOptionPane
)。