1

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

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

return true;
4

4 回答 4

5

就像约翰霍普金斯所说的那样try{return true;}finally{yourCode},在调用 return 之后执行代码。但是恕我直言,这没有经过适当的考虑,我会改变程序的设计。你能告诉我们更多关于你在这背后的想法以了解你的方式吗?

您可能想要做的事情:

public void myMethod() {
  return true;
}

if(myMethod()) {
  client.invoke()
}
于 2013-11-07T16:11:46.707 回答
1

您可以使用匿名线程来实现您想要的并在其中添加一秒钟的延迟。

try{return true;}finally{yourCode}不会成功,因为 finally 将在方法实际返回之前执行。

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;
于 2013-11-07T16:05:25.747 回答
0

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

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);
}
于 2013-11-07T16:12:06.003 回答
0

IMO,“在调用返回之后”但在调用方法处理之前执行某些操作,返回值与在返回之前执行此操作没有区别,因此您应该问自己,您希望它何时发生。

在 Swing GUI 应用程序中,您可以使用SwingUtilities.invokeLater延迟可运行对象的执行,直到完成“其他所有操作”。当单个用户操作导致执行大量侦听器时,这有时很有用(一个组件失去焦点,另一个组件获得焦点,并且所述另一个组件也被激活......只需单击鼠标即可)。

于 2013-11-07T16:42:53.663 回答