java 一个类调用另一个类的方法 怎样控制另一个类的方法执行完再继续执行本类

比如:
要在类A的方法中调用类B的方法(是个构造函数),类B中的方法主要是实现登录功能,要有输入,输入用户名和密码,想在类A的方法中获取类B方法中输入的用户名,然后继续执行类A方法的一些列查询操作。
但是通过执行发现,在类A中并没有真正取到类B中输入的值,而且在调用类B时,弹出登录窗口的同时,调用语句后面的语句已经执行完了。
因此,我怀疑是程序的执行循序有问题。但是不知道应该怎么改。希望能有人帮我解答一下,不胜感激!
如图所示程序,当前为类A,第三行为调用类B,第四行获取输入的用户名。运行时弹出登录界面,但是同时控制台输出第五行代码,为null,说明还没有输入时就已经往下继续执行了。输入一个有效的用户名后,运行结果也没有按照预想的进行。

按照你的代码,最简单但笨拙的解决方案如下:

//method reco
JPasswordFieldDemo JP=new JPasswordFieldDemo();
String reader_id = null;
do{
reader_id=JP.reader_id;
int n1=0;
//后续登陆check逻辑
}while(reader_id!=null);

最好的做法是给登陆窗口中的登陆按钮触发事件时调用后续的登陆查询逻辑

//method reco
//1.实例化登陆窗口对象
JPasswordFieldDemo JP=new JPasswordFieldDemo();//构造是不要立即显示窗体
//2.注册事件
JButton loginBtn=JP.getLoginButton();//简单封装下,当然可以粗糙些,类似 JP.reader_id
//注册一个listener
loginBtn.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){
//后续登陆check逻辑
}
});

//3.显示登陆窗口
JP.setVisible(true);

 看了下,你说好像去登陆框里的值有问题,取不到,可以这样封装个方法在类JPasswordFieldDemo

//类JPasswordFieldDemo中定义一个方法
public String getLoginName(){
//用户名控件 nameTextField
return nameTextFiled.getText();
}
//密码控件也可以类似

然后在当前类中recommend中

String reader_id=JP.reader_id 改成

String reader_id=JP.getLoginName();

类似这种

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-10

在调用另一个类的方法下面接着写本类需要执行的方法。

1、定义2个类

public class A{//调用类
}
public class B{//被调用类
    public void show(){//B类中的方法
    }
}

2、A类调用B类

public class A{//调用类
   public void show(){
      B b = new B();
      b.show();//调用B类方法
      ...//接着执行A类方法
   }
}

第2个回答  2014-08-25

你希望是同步(阻塞)的,但实际上是异步调用的。

如果只是想控制流程,可以这么写:

String reader_id = null;
while(true){
    reader_id = JP.reader_id;
    if(reader_id != null){
        break;
    }
}
system.out.println(reader_id);

追问

谢谢!感觉这样也不行啊,我再想想吧。

追答

好吧,记着点个赞~

追问

怎么点啊?没有看到哇!
口头表扬吧,赞!

追答

哈哈,没白忙活就好

第3个回答  2014-08-25
这里你已经做到了类的调用,A类调用B类的对象JP的时候是已经执行完操作才继续下一步的。你需要检查你B类中有没有正确的取值和赋值,先用System.out.println(reader_id);在B类取用户名值的部分进行测试,如果输出是正确的,就是B到A的参数传递出错了;如果同样没有输出,那么就是你的取值赋值部分的代码没有写对。追问

首先非常感谢!
System.out.println(reader_id);输出的结果是null。
取值赋值的代码是reader_id=username.getText(); 其中reader_id是类B中构造函数的成员变量,username是用来保存在登录界面输入的用户名的。
这个代码应该是没有问题的。

追答

System.out.println(reader_id);输出的结果是null。——这就是说明你的取值赋值没有写对
这里你是使用登陆按钮控制取值的,你检查下你登陆按钮的动作部分关于赋值的代码

第4个回答  2014-08-25
我想说你的逻辑有点反了,为什么不让B类去调用A类中的方法,在B类方法中用A的方法把列先查询出来之后,然后登陆时输入就可以获得用户名和密码,然后再进行比较!望采纳!追问

那样更乱,我试过了,没有成功。
因为需要B类中输入用户名,然后才能继续在类A中执行,执行完的结果还要送给类B来输出。

相似回答