我有一個javafx應用程序,用於簽署用戶上傳的文件。它會分別顯示這些文件的名稱。一次顯示一個元素
問題是,要在屏幕上顯示文件,它會等待所有文件被簽名。所有文件簽名後,突然顯示所有文件。
繼GIF顯示當前狀態:
但我想以不同的方式來顯示它們。因此,在開始簽名過程之前,每個文件都應等待先前顯示的文件。這就像一次顯示一個元素(但不使用setInterval或setTimeout)。換句話說,我想讓Java和Javascript相互溝通。
我在java端使用for循環。在這個for循環中,我調用javascript函數在div中顯示文件名。
Java代碼:
List<String> files = new ArrayList<String>();
for (Iterator<File> iterator = fWrapper.getFiles().iterator(); iterator.hasNext();) {
File unsignedFile = iterator.next();
String targetFileStr = targetPath + "/" + unsignedFile.getName();
File signedFile = signer.signUDF(unsignedFile);
files.add(targetFileStr);
signedFile.renameTo(new File(targetFileStr));
Browser.webEngine.executeScript("signedSuccessfully('" + unsignedFile.getName() + " is signed.')"
}
和JavaScript代碼:
function signedSuccessfully(msg) {
$("#statusText").append('<br><span style="color:green"> - ' + msg + '</span>');
}
是否有任何人誰可以給我約我怎麼能做到這一點一些建議?
預先感謝您。
我猜你所發佈的代碼是在FX應用程序線程上執行的。在後臺線程中執行循環並將調用封裝到'Platform.runLater(...)'中的'executeScript(...)'中。 –
感謝您的評論James,其實我是javafx中的貪婪人物。我想我沒有使用線程,我猜我的代碼沒有在FX應用程序線程上執行。你能更好地描述它嗎?或者你有其他想法嗎? –