SWT-диалог двух потоков пользовательского интерфейса

В одном диалоговом окне SWT я собираюсь добавить функцию входа в систему и проверки времени.

public class LoginDialog extends Dialog   {

   //basic code

    /**
     * Create contents of the dialog.
     */
    private void createContents() {
        //UI code

        RealtimeThread realtimeThread=new RealtimeThread(lbl_time, btn_login);

        Thread thread=new Thread(realtimeThread);
        thread.start();
    }

    //relevance methods

    }

    class RealtimeThread implements Runnable{
    private Label lbl_time;
    private Button btn_login;

    public RealtimeThread(Label lbl_time, Button btn_login) {
        // TODO Auto-generated constructor stub
        this.lbl_time=lbl_time;
        this.btn_login=btn_login;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

        Display.getDefault().asyncExec(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                while(true){
                    int year, month, day, hour, min, sec;

                    year=Integer.parseInt(String.valueOf(new SimpleDateFormat("yyyy").format(new Date())));
                    month=Integer.parseInt(String.valueOf(new SimpleDateFormat("MM").format(new Date())));
                    day=Integer.parseInt(String.valueOf(new SimpleDateFormat("dd").format(new Date())));
                    hour=Integer.parseInt(String.valueOf(new SimpleDateFormat("HH").format(new Date())));
                    min=Integer.parseInt(String.valueOf(new SimpleDateFormat("mm").format(new Date())));
                    sec=Integer.parseInt(String.valueOf(new SimpleDateFormat("ss").format(new Date())));

                    lbl_time.setText(year +"year " + month +"month " + day + "day " + hour + ": " + min + ": " + sec    );
                    break;
                }
            }
        });
    }

}

Хочу узнать время в реальном времени. И функция входа в систему для работы одновременно. Но время бежит, когда код выполняется, а возможности диалога застывают. В run () функция while (true) вызвала зависание. Как это решено?

Используйте API заданий vogella.com/tutorials/EclipseJobs/article.html

Shashwat 25.05.2018 06:31

Вы, вероятно, захотите использовать Display.timerExec для многократного выполнения небольшого фрагмента кода, но ваш текущий код не очень ясен.

greg-449 25.05.2018 09:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
35
0

Другие вопросы по теме