Spec-Zone .ru
спецификации, руководства, описания, API
|
Вопрос 1: Для каждой из следующих задач определите, какой поток она должна быть выполнена в и почему.
Ответ 1:
javax.swing.JComponent.setFont
setFont
от любого другого потока.javax.swing.text.JTextComponent.setText
Вопрос 2: Один поток не является привилегированным потоком для любой из задач, упомянутых в предыдущем вопросе. Назовите этот поток и объясните, почему его приложения столь ограничиваются.
Ответ 2: начальные потоки запускаются, первая задача GUI на событии диспетчеризируют поток. После этого программа Swing прежде всего управляется событиями GUI, которые инициировали задачи на событии, диспетчеризируют поток и рабочий поток. Обычно, начальные потоки не оставляют ни с чем сделать.
Вопрос 3: SwingWorker
имеет два параметра типа. Объясните, как эти параметры типа используются, и почему часто не имеет значения, каковы они.
Ответ 3: параметры типа определяют тип окончательного результата (также тип возврата doInBackground
метод) и тип промежуточных результатов (также параметр вводит для publish
и process
). Много фоновых задач не обеспечивают заключительные или промежуточные результаты.
Вопрос 1: Измените
пример так, чтобы это приостановило 5 секунд между "зеркальными отражениями монеты." Если пользователь щелкает по "Отмене", зеркально отражающий монету цикл сразу завершается.Flipper
Ответ 1: См. исходный код для
. Измененная программа добавляет задержку центрального Flipper2
doInBackground
цикл:
protected Object doInBackground() { long heads = 0; long total = 0; Random random = new Random(); while (!isCancelled()) { try { Thread.sleep(5000); } catch (InterruptedException e) { //Cancelled! return null; } total++; if (random.nextBoolean()) { heads++; } publish(new FlipPair(heads, total)); } return null; }
try ... catch
причины doInBackground
возвратиться, если прерывание получается, в то время как поток спит. Вызов cancel
с параметром true
гарантирует, что прерывание отправляется, когда задача отменяется.