Обновление Java TextArea [дубликат]

Если у вас есть такая конфигурация:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Раскомментируйте следующие строки в вашем httpd.conf

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

Это работает для меня

1
задан Moynul 30 December 2014 в 14:49
поделиться

2 ответа

Вам необходимо соблюдать правила потоковой передачи Swing, которые вкратце кратко означают, что все выполняемые задачи, такие как ожидание и захват ваших данных, должны выполняться в фоновом потоке, и все вызовы Swing должны выполняться в потоке событий Swing , Используйте SwingWorker<Void, String>, чтобы помочь вам это сделать.

Пожалуйста, просмотрите Параллельность в Swing , чтобы увидеть учебник со всеми подробностями gory.

, например,

private class MySwingWorker extends SwingWorker<Void, String> {
  private byte[] buffer = new byte[2000];

  @Override
  protected Void doInBackground() throws Exception {
     while (true) {
        DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
        serverSocket.receive(incoming);

        String incomingMessage = new String(incoming.getData());
        publish(incomingMessage);
     }
     return null;
  }

  @Override
  protected void process(List<String> chunks) {
     for (String chunk : chunks) {
        textArea.append("Client: " + chunk + "\n");
     }
  }
}

Другие предложения:

  • Вы вызываете execute() в SwingWorker для его запуска.
  • Я почти всегда добавляю PropertyChangeListener к своему работника перед его исполнением.
  • В этом слушателе я смотрю, как newValue является SwingWorker.StateValue.DONE.
  • Когда я сталкиваюсь с этим, я вызываю get() на свой SwingWorker, даже если он возвращает Void. Это поможет мне отследить и ответить на любые исключения, которые могли произойти в SwingWorker по мере его запуска.
4
ответ дан Hovercraft Full Of Eels 21 August 2018 в 10:54
поделиться
  • 1
    Спасибо, жаль, что я никогда не делал GUI с Java, поэтому никогда не знал, что существуют такие правила, как то, что потоки могут делать. Красиво объяснено! Пользуемся классом Swing Worker! – Moynul 30 December 2014 в 15:18

С циклом while мой текст не обновляется

Скорее всего, вы запустили свой цикл в EDT (Event Dispatching Thread) . Это препятствует обновлению пользовательского интерфейса. Попробуйте вместо этого запустить свой код в другом потоке. SwingWorker может быть одним из вариантов, создание другого механизма Thread или ThreadPool (служба исполнителей) - это еще одно решение. Просто убедитесь, что все ваши обновления для пользовательского интерфейса выполняются в EDT (например, перемещая их в блок EventQueue.invokeLater)

См. Также эту ссылку, в которой приведен пример того, как правильно использовать SwingWorker

2
ответ дан Guillaume Polet 21 August 2018 в 10:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: