亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在未執行 thread.sleep 之前調用的方法

在未執行 thread.sleep 之前調用的方法

qq_遁去的一_1 2021-11-17 15:35:25
我正在嘗試編寫一個基本的 Java 程序,它允許用戶移動一個簡單的復合形狀,在其中,我有一個鏈接到私有 QuitHandler 類的按鈕 (QuitButton)。單擊退出按鈕時,我希望在退出程序之前在程序窗口中播放動畫。我知道我必須實現一個延遲,以便用戶能夠在程序退出之前看到動畫,所以我在動畫之后但在 System.exit(0) 之前使用 Thread.sleep(1000) 添加了一個延遲叫。所以我的代碼看起來像這樣://in private QuitHandler class (class linked to button)//An ActionEvent is handed to handle(ActionEvent event) as a parameter//when the quit button is clickedpublic void handle(ActionEvent event) {    animation.animate();    this.delay();    System.exit(0);}private void delay() {  try {  Thread.sleep(1000);  }  catch (InterruptedException e) {  }}每當我注釋掉 this.delay() 和 System.exit(0) 時,我想顯示的動畫就可以正常播放。每當我注釋掉 animation.animate() 并留下 this.delay() 和 System.exit(0) 時,每當我按下退出按鈕時,都會有 1 秒的延遲,然后程序退出。但是,當我對所有三個(動畫、延遲和 System.exit)進行注釋時,動畫不會播放,我只會得到延遲并且程序退出。我對控制流的理解會讓我相信動畫應該在延遲被觸發之前播放,所以我不明白為什么動畫自己工作,而不是當 this.delay() 和 System.exit(0 ) 在它之后被調用。我在 JavaDocs 上查找了 Thread.sleep() 方法,但沒有看到任何解釋為什么我的方法實現會導致以前的方法無法執行的內容。我最好的猜測是 Thread.sleep() 方法有一些問題導致了這個問題,但我不確定它可能是什么。
查看完整描述

2 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

試試吧Thread.wait。我不知道那個動畫是如何工作的,但也許它與當前線程同步。Thread.sleep保持線程的監視器,而等待釋放它允許其他線程運行。


查看完整回答
反對 回復 2021-11-17
?
MM們

TA貢獻1886條經驗 獲得超2個贊

由于該handle()方法是在 UI 線程上執行的,因此在animate()方法handle()完成之前不會評估該方法的結果。因此我建議使用Timer和TimerTask做這樣的事情(取自這個例子):


animation.animate();

TimerTask task = new TimerTask() {

  public void run() {

    System.out.println("Task performed after 1 second");

    System.exit(0);

  }

};

Timer timer = new Timer("Timer");

long delay = 1000;

timer.schedule(task, delay);

這樣,延遲將變為異步并且handle()方法將完成,從而允許 UI 線程繪制圖形。


如果有幫助,請告訴我:)


查看完整回答
反對 回復 2021-11-17
  • 2 回答
  • 0 關注
  • 246 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號