2015-06-09 35 views
0

比方說,我們有這樣的代碼:如何等待一個方法裏面,直到其他方法完成

int number; 

public void onMessageReceived(int num) { 
    number = num; 
} 

public int getNumber() { 
    sendMessage("number") 
    return number; 
} 

你得到的消息只讓後說1秒。

你是如何「等待」,直到你得到的「數量」不結冰主線程?

public int getNumber() { 
    sendMessage("number") 
    //WAIT TILL I GET THE "NUMBER" 
    return number; 
} 
+0

從哪裏調用onMessageReceived()方法? –

+0

你能更清楚..如果你的方法執行的程序起點序列,使混亂 – Babel

+0

問題是我使用Bungeecord和插口庫......我真的不能修改它們,因爲更新將是一個疼痛 –

回答

1

您可能想使用Java Future等。

看一看在docs或閱讀了這個簡單的example

+0

看起來不錯!正是我所需要的...去試試它,並將其標記爲正確的,如果它有效的話。 –

+0

哦,哦,它仍然凍結線程,我不接收郵件 –

+0

@DenRandomstuff也許你可以顯示你試過的代碼?此外,它確實取決於上下文,即您正在運行的應用程序。如果它是一個網絡應用程序,那麼當然它需要在某個時候阻止。如果它是桌面應用程序,主UI線程仍應該運行。 – Crembo

-1

可能是遞歸methodlogy

public int getNumber() { 

while(number!=0) 
getNumber(); //Assuming number will not be null till you get positive integer greater than a zero same method will get recalled. 
sendMessage("number") 

return number; 
} 

onMessageReceived(int num)叫那麼您可以在number找到一個正整數,這樣它會countinue執行

+0

什麼是「num」? –

+0

這將endup濫發「一把手」的要求 –

+0

在你的方法的另一個弱點:它把「特殊意義」上的值0長話短說:不要試圖提供「答案」,只是解決這個問題。始終爲自己考慮「選擇空間」;並確定具有最佳「pro vs con」比率的解決方案。 – GhostCat

0

您應該使用join方法...

當一個線程調用join()方法上另一個線程,當前正在運行的線程將等待直到它加入的線程完成。