Работа с многопоточностью в пользовательском интерфейсе - PullRequest
0 голосов
/ 20 мая 2019

Я на самом деле использую слушатели сокетов в программе на Java. Идея состоит в том, чтобы позволить моей программе работать, пока она не перехватит внешнее событие. Как только он его поймает, мне нужно обновить макет.

Чтобы мое приложение работало во время прослушивания определенного порта, я сделал что-то вроде этого:

// new thread allows me to let my program continue
new Thread() {
    public void run() {
        try {
            while (true) {
                try (ServerSocket listener = new ServerSocket(59090)) {
                    System.out.println("The server is running...");
                    // listening
                    while (true) {
                        try (Socket socket = listener.accept()) {
                            // catches event
                            System.out.println("event caught");
                            InputStream raw = socket.getInputStream();
                            headerData = getHeaders(raw);
                            // some code
                            // ...
                            // ...

                            // Update UI
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}.start();

Идея состоит в том, что я постоянно слушаю порт 59090 и выполняю свой конкретный код, как только использую этот порт, и это хорошо работает.

Проблема сейчас в том, когда я ловлю событие. Кажется, что я не могу действовать в пользовательском интерфейсе, если я не в «основной» теме. Я прав ? Можно ли отправить информацию в мой «главный поток», чтобы сообщить ей об обновлении пользовательского интерфейса? В противном случае возможно ли "переключить" мой основной поток на этот?

РЕДАКТИРОВАТЬ:

Я видел, что в Android вы можете использовать AsyncTask, а метод onPostExecute () позволяет отправлять информацию в поток пользовательского интерфейса.

onPostExecute (Result), вызывается в потоке пользовательского интерфейса после завершения фоновых вычислений. Результат фонового вычисления передается на этот шаг в качестве параметра.

Есть ли эквивалент в Java?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...