返回java值时出现的问题

返回java值时出现的问题,java,return,mouselistener,Java,Return,Mouselistener,我有一个包含MouseEvent的方法。如何返回idu变量? 它就像一个方法中的一个方法,或者如何调用它,我不知道top如何返回idu变量 public int getId() { int idu; table.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 1) {

我有一个包含MouseEvent的方法。如何返回idu变量? 它就像一个方法中的一个方法,或者如何调用它,我不知道top如何返回idu变量

public int getId() {   
    int idu;
    table.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 1) {
            JTable target = (JTable)e.getSource();
            int row = target.getSelectedRow();
            Object record = data[row][0]; 
            idu = (Integer) record;                
        }   
    }
    });  
return idu;
}

几乎在所有情况下,“侦听器”模式都涉及使用没有返回值的方法注册侦听器。一般来说,来自监听器的返回值是没有意义的,因为它被返回给调用者,而调用者并没有关于如何处理它的上下文

在我看来,您似乎误解了您发布的代码中的一些内容: 1.在“getter”方法中注册侦听器没有什么意义。监听器需要注册一次,通常在类的构造函数中 2.注册侦听器本身并没有做任何事情:它只是告诉处理程序在事件发生时调用您的方法(在本例中是单击鼠标)。 3.除非您在多个位置重用侦听器(由于它是一个匿名类,所以不在本代码段中),否则您不需要获取事件源-您应该已经将它作为类中的成员字段


因此,在您的案例中,答案是JTable应该是类的成员字段。然后getId方法只需要返回表中选定的行。根本不需要注册鼠标侦听器,因为所选行在JTable中可用,无需任何额外工作。

思考以下问题:

idu
值准备好使用时-当方法
getId()
完成运行时,或者当用户在表上单击鼠标按钮时

您的代码实际要做的是注册一个事件侦听器,有点像设置一个警报或为以后安排一个任务,然后进入睡眠状态,或者返回到您现在需要执行的任何其他任务


退出
getId()
方法时,
idu
的值不一定存在,因为
mouseClicked()
方法中的代码还没有必要执行。它只会在事件实际发生时执行。

似乎您对异步编程的工作原理有一个基本的误解。