我在初始化期间使用progrss栏调用启动画面的应用程序有问题,这是我的应用程序内部代码的一部分,
try {
Runtime runTime = Runtime.getRuntime();
pbaw = runTime.exec(cmdGen);
//pbaw = probuilder.start();
try {
String line;
BufferedReader input =
new BufferedReader(new InputStreamReader(pbaw.getInputStream()));
SplashScreen ss= new SplashScreen(Display.getCurrent(), getShell());
int progress = 0;
ss.show();
while ((line = input.readLine()) != null) {
ss.setLabel(line);
progress+=1;
ss.advance(progress);
//System.out.println(line); //<-- Parse data here.
}
input.close();
ss.destroy(pbaw.waitFor());
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
我的问题是为什么当我点击桌面或运行其他应用程序时,启动画面中的程序栏无法更新,但我的应用程序可以完美运行,请帮助??? 这里是我的泼溅scrren代码的一部分,以明确,
void advance(final int progress) {
if (!progressBar.isDisposed()) {
progressBar.setSelection(progress);//progressBar.getSelection() + progress);
progressBar.redraw();
}
}
public void show() {
mainShell.pack();
mainShell.open();
}
void destroy(int val) {
if (val==0){
splashComposite.dispose();
if (appImage != null) {
appImage.dispose();
}
mainShell.dispose();
}
}
答案 0 :(得分:1)
您正在用户界面线程中运行代码,并且永远不会让SWT有机会进行更新。您需要在单独的线程中运行您的阅读代码,并使用Display.asyncExec
更新UI线程中的初始屏幕。