如何在返回呼叫之前延迟一段代码?

时间:2013-11-07 15:58:45

标签: java return

在一个方法中,我需要调用一些代码但是在方法的返回调用之后。我该怎么做?

// this call needs to happen after the return true call  
xmlRpcClient.invoke("newDevices", listDeviceDesc);

return true;

4 个答案:

答案 0 :(得分:5)

就像JohnHopkins所说,在调用返回后使用try{return true;}finally{yourCode}来执行代码。但恕我直言,这是没有经过深思熟虑,我会改变该计划的设计。你能告诉我们更多关于你背后的想法以了解你的方式吗?

你可能想做什么:

public void myMethod() {
  return true;
}

if(myMethod()) {
  client.invoke()
}

答案 1 :(得分:1)

您可以使用匿名线程来实现您想要的效果,并在内部添加一秒延迟。

try{return true;}finally{yourCode}不会这样做,因为最终将在方法实际返回之前执行。

new Thread() {

    public void run() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // this call needs to happen after the return true call  
        xmlRpcClient.invoke("newDevices", listDeviceDesc);
    }
}.start();
return true;

答案 2 :(得分:0)

我正在阅读Java中的finally块,我了解到它将永远执行,除非JVM崩溃或System.exit()被调用。可以在此StackOverflow question中找到更多信息。鉴于此信息,这应该适合您。

try {
    return true;
} catch (Exception e) {
    // do something here to deal with anything
    // that somehow goes wrong just returning true
} finally {
    xmlRpcClient.invoke("newDevices", listDeviceDesc);
}

答案 3 :(得分:0)

IMO,“在调用返回之后”执行某些操作但在调用方法处理返回值之前与返回值之间的操作无法区分,因此您应该问自己,何时确切地想要它发生。

在Swing GUI应用程序中,您可以使用SwingUtilities.invokeLater来延迟执行runnable,直到“其他所有内容”完成。当单个用户操作导致大量侦听器被执行时,这有时很有用(一个组件失去焦点,另一个组件获取它,另一个组件也被激活...只需单击一下鼠标就可以了。)