我有一個批處理文件,應該從我的JavaFX應用程序啓動。將程序輸出附加到JavaFX文本框
我嘗試了多種不同的實現方法:
追加程序的輸出文件,該過程完成此之後,讀取文件,並添加內容到我的文本框中。
這是錯誤的原因很多,主要是因爲GUI掛起,直到程序結束。
所以我研究了使用線程,但是當在線程中使用3210時,會發生同樣的事情。 我試圖這樣做,當進程正在運行時,將輸出的內容添加到我的文本框。它只在程序結束後才被添加,即使我在單獨的線程中執行此操作。我也嘗試使用Platform.runLater(new Runnable() ...
。 因此,內容會定期更新,但一次仍會大量存儲數據,並且還會導致GUI掛起。
然後我發現,JavaFX是不是線程安全的,並且有一個庫:
javafx.concurrent.Task
這裏沒有爲它的一個示例: https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm
但儘管如此,我不能肯定如果我越來越接近我所期待的......
基本上,我需要這樣的事情,但是這使得GUI不掛:
Process p = Runtime.getRuntime().exec(executeString);
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
while(p.isAlive())
{
String line;
try
{
if ((line = br.readLine()) != null)
logArea.appendText(line + "\n");
} catch(Exception e)
{
}
}
通過看你的代碼,你不應該定義「過程P」之前先「的InputStream爲= p.getInputStream();」 –
是的,它應該是 –
Shouldnt「while(p.isAlive())」也等待進程死掉然後讀取文件? –