SWT Force Re-Draw of Label - PullRequest
       28

SWT Force Re-Draw of Label

0 голосов
/ 30 августа 2011

У меня есть простой метод, который устанавливает текст метки:

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.

1 Ответ

0 голосов
/ 31 августа 2011

Вы должны обновить этикетку после установки текста. Управляющий API (который является суперклассом для всех компонентов SWT) имеет метод redraw (), который снова вызывает метод создания содержимого и должен предоставить искомый результат.

Надеюсь, это поможет.

...