Я на самом деле использую слушатели сокетов в программе на 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?
Спасибо