У меня есть простой метод, который устанавливает текст метки:
public void setStatus(final String status){
statusLabel.setText(status);
}
, но когда я вызываю его перед любым видом Display.asyncExec (Runnable), кажется, что он не будет выполняться до тех пор, пока этот Runnableзавершено.Я даже пытался реализовать его в Runnable, и он не работает.Например, у меня есть пункт меню «загрузить файл», который я хотел бы, чтобы статус отображал «Загрузка: [имя файла]» после того, как пользователь выбрал файл:
MenuItem mntmLoadFile = new MenuItem(menu_4, SWT.NONE);
mntmLoadFile.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
String file = GuiWorkshop.selectFile(shell, new String[]{"*.apk"});
if(file != null){
try{
setStatus("Loading File: " + file);
controller.loadFile(new File(file));
} catch (Exception e){
GuiWorkshop.messageError(shell, "Could not load file: " + e.getMessage());
logger.error("Could not load file: ", e);
}
clearStatus();
}
}
});
mntmLoadFile.setText("Load file");
строка «controller.loadFile (новый файл (файл)); "это то, что выполняет всю загрузку, но setStatus никогда не будет обновляться, пока не завершится.Есть ли способ заставить это завершиться до выполнения следующей строки?Я не уверен, является ли это проблемой локального потока или проблемой потока SWT.