在一个方法中,我需要在方法的返回调用之后调用一些代码。我该怎么做呢?
// this call needs to happen after the return true call
xmlRpcClient.invoke("newDevices", listDeviceDesc);
return true;
就像约翰霍普金斯所说的那样try{return true;}finally{yourCode}
,在调用 return 之后执行代码。但是恕我直言,这没有经过适当的考虑,我会改变程序的设计。你能告诉我们更多关于你在这背后的想法以了解你的方式吗?
您可能想要做的事情:
public void myMethod() {
return true;
}
if(myMethod()) {
client.invoke()
}
您可以使用匿名线程来实现您想要的并在其中添加一秒钟的延迟。
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;
我正在阅读finally
Java 中的块,我了解到它将始终被执行,除非 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);
}
IMO,“在调用返回之后”但在调用方法处理之前执行某些操作,返回值与在返回之前执行此操作没有区别,因此您应该问自己,您希望它何时发生。
在 Swing GUI 应用程序中,您可以使用SwingUtilities.invokeLater
延迟可运行对象的执行,直到完成“其他所有操作”。当单个用户操作导致执行大量侦听器时,这有时很有用(一个组件失去焦点,另一个组件获得焦点,并且所述另一个组件也被激活......只需单击鼠标即可)。