Java 当变量为';它不是空的
当PasswordFrame不是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
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
的要点。在输入密码之前,是否真的要在紧循环中阻止线程?似乎您应该有某种类型的事件,当密码可用时触发该事件,并且外部代码应该侦听该事件。