我创建了一个运行jarfile的JavaFX应用程序并获取它的(错误)输入流,然后用它重新绘制标签。为了做到这一点,(因为循环),我实现了Platform.runLater(Runnable); 。每当我运行jarfile时,程序立即停止响应。 (该程序是JFrame应用程序的翻版。它运行顺利,但我使用的是线程。)以下是导致问题的代码部分:
Platform.runLater(new Runnable(){
@Override
public void run(){
try{
data.updateConsole("Starting server!");
//String fileDir = data.dir + File.separator + "craftbukkit.jar";
Process proc = Runtime.getRuntime().exec("javaw -Xmx2048M -jar "+"craftbukkit.jar"+" -o true --nojline");
data.setOutputStream(proc.getOutputStream());
is = proc.getErrorStream();
}catch(IOException ex){
ex.printStackTrace();
}
BufferedReader readr = new BufferedReader(new InputStreamReader(is));
data.setServerStarted(true);
String line;
try {
while(data.serverStarted()){
if((line = readr.readLine()) != null){
data.updateConsole(line);
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
readr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}});
任何想法为什么会发生这种情况?
答案 0 :(得分:1)
通过在平台线程上运行“java -jar”,您将阻止UI刷新。您应该创建一个单独的线程来运行“java -jar”逻辑,然后使用runLater来更新标签。