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

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

在等待 Swing 對話框結果時在 JavaFX 中阻塞

在等待 Swing 對話框結果時在 JavaFX 中阻塞

DIEA 2021-08-25 17:24:36
背景我有一個Swing應用程序。我運行嵌入在 Swing 應用程序中的JavaFx。我在JavaFx應用程序中運行 Web 瀏覽器 ( webview ) 。我添加了一個處理程序來接收網絡瀏覽器的功能。此處理程序在JavaFx事件線程中調用。處理程序是同步的,并返回給webview。confirmboolean問題要向用戶打開Swing對話框,我需要在Swing事件線程上運行,但僅在響應對話框后從 JavaFx 回調中返回。這是我的回調示例engine.setConfirmHandler(()->{   // in JavaFX context   CountdownLatch latch = new CountdownLatch(1);   SwingUtilities.invokeLater(()->{      // in Swing context      showModalDialog();      latch.countDown();   });   // Wait for latch   // HOW DO I BLOCK HERE AND STILL PROCESS EVENTS IN JAVAFX/SWING?   return result;});題如何延遲從回調返回,直到對話框關閉,同時不阻止JavaFX或Swing上下文中的UI 事件?
查看完整描述

1 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

JavaFX 有一種在處理事件的同時進行阻塞的方法。


爪哇 8


Toolkit.getToolkit().enterNestedEventLoop(key)

爪哇 9


Platform.enterNestedEventLoop(key)

然后另一個線程可以exitNestedEventLoop解除阻塞,作為獎勵,也可以返回一個值。


爪哇 8


Toolkit.getToolkit().exitNestedEventLoop(key, result)

爪哇 9


Platform.exitNestedEventLoop(key, result)

但是,exitNestedEventLoop從 Swing調用時,您必須切換回 JavaFX 上下文。


所以這是工作示例(Java 8)。


engine.setConfirmHandler(()->{

   // in JavaFX context


   SwingUtilities.invokeLater(()->{

      // in Swing context

      boolean result = showModalDialog();

      Platform.runLater(()->{

          // back to JavaFX context

          Toolkit.getToolkit().exitNestedEventLoop(key, result)

      })

   });


   // Wait for result

   boolean result = Toolkit.getToolkit().enterNestedEventLoop(this)

   // still in JavaFX context

   return result;

});


查看完整回答
反對 回復 2021-08-25
  • 1 回答
  • 0 關注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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