Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop - Fatal编程技术网

Java 当变量为';它不是空的

Java 当变量为';它不是空的,java,oop,Java,Oop,当PasswordFrame不是null时,我需要从主类中的PasswordFrame获取password变量的值。下面是密码框的代码: public class PasswordFrame extends JFrame { static JTextField tf; static JButton button; public String password; boolean isPassword = false; public PasswordFram

当PasswordFrame不是
null
时,我需要从主类中的PasswordFrame获取password变量的值。下面是密码框的代码:

public class PasswordFrame extends JFrame {
    static JTextField tf;
    static JButton button; 
    public String password;
    boolean isPassword = false;
    public PasswordFrame(){
        tf = new JTextField();
        button = new JButton("Enter");
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                password =  tf.getText();
                isPassword = true;
            }

        });
    }
我已经尝试使用以下代码执行此操作:

public String getPassword(){
        while(!(isPassword)){
        }
        System.out.println("out");
        return password;
    }
但是当我试着

PasswordFrame  passwordfield = new PasswordFrame();
if (password.equals(passwordfield.getPassword())){
//code
}
“out”未打印,在循环时无法退出
。为什么?以及如何使PasswordFrame正确工作并返回密码

另外,如果你打算否决投票,请告诉我有什么可以改进的,以使我的问题更清楚。

试试这个:

public class PasswordFrame extends JFrame {
static JTextField tf;
static JButton button; 
public String password;
boolean isPassword = false;
public PasswordFrame(){
    tf = new JTextField();
    button = new JButton("Enter");
    button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
        password =  tf.getText();
            /* 
             * Check for non-null password must check both 
             * conditions ion this order
             */
            if(if(password != null && ! password.isEmpty()){
               isPassword = true;
            }
        }

    });
}
试试这个:

public class PasswordFrame extends JFrame {
static JTextField tf;
static JButton button; 
public String password;
boolean isPassword = false;
public PasswordFrame(){
    tf = new JTextField();
    button = new JButton("Enter");
    button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
        password =  tf.getText();
            /* 
             * Check for non-null password must check both 
             * conditions ion this order
             */
            if(if(password != null && ! password.isEmpty()){
               isPassword = true;
            }
        }

    });
}

boolean-isPassword
应替换为
volatile-boolean-isPassword
(根据@Lashane的评论),以表明不同的线程可以更改此变量。

boolean-isPassword
应替换为
volatile-boolean-isPassword
(根据@Lashane的评论)显示不同线程可以更改此变量。

您的while循环为空。如果它从未改变过它的条件,它怎么可能终止呢?
boolean isPassword
应该是volatile@azurefrog但当我按下“回车”按钮时,条件会改变。对吗?这取决于您在何处以及如何定义和调用
getPassword()
。这个方法应该做什么?你是如何使用它的?我不确定我是否理解
getPassword
的要点。在输入密码之前,是否真的要在紧循环中阻止线程?似乎您应该有某种类型的事件,当密码可用时触发该事件,并且外部代码应该侦听该事件。您的while循环为空。如果它从未改变过它的条件,它怎么可能终止呢?
boolean isPassword
应该是volatile@azurefrog但当我按下“回车”按钮时,条件会改变。对吗?这取决于您在何处以及如何定义和调用
getPassword()
。这个方法应该做什么?你是如何使用它的?我不确定我是否理解
getPassword
的要点。在输入密码之前,是否真的要在紧循环中阻止线程?似乎您应该有某种类型的事件,当密码可用时触发该事件,并且外部代码应该侦听该事件。