Есть ли способ запустить и остановить SwingWorker более одного раза? - PullRequest
3 голосов
/ 16 июля 2010

У меня есть кнопка запуска и остановки.Мне сказали, что я должен использовать SwingWorker.Код, который у меня сейчас работает отлично.Я начинаю и прекращаю.Но что, если я захочу начать это снова?Я читаю, что метод doinBackground будет выполняться только один раз.Есть ли способ запустить его заново? ??в True, когда я нажимаю кнопку «Пуск» и устанавливаю в «False», когда я нажимаю кнопку «Стоп».

Есть ли способ обойти это .. ??

Спасибо

Ответы [ 3 ]

7 голосов
/ 16 июля 2010

Документация SwingWorker API отвечает на ваш вопрос:

SwingWorker предназначен только для выполняется один раз. Выполнение SwingWorker более одного раза не приведет к вызов метода doInBackground в два раза.

Документация по SwingWorker API

Вам нужно будет создавать новый экземпляр SwingWorker при каждом нажатии кнопки запуска.

1 голос
/ 16 июля 2010

Я хотел бы предложить, чтобы объект инкапсулировал SwingWorker.Когда кнопка «go» нажата, пусть этот объект создает SwingWorker и запускает его.Когда установлен флаг «stop», SwingWorker завершает сам и сообщает инкапсулирующему объекту, что он завершен.При повторном нажатии кнопки «go» инкапсулирующий объект создает новый SwingWorker и т. Д.

0 голосов
/ 16 июля 2010

Каждый SwingWorker разработан, чтобы быть выполненным один раз, как вы говорите. В этом отношении каждый объект представляет одно выполнение.

Таким образом, один действительный (и, вероятно, самый простой) способ сделать то, что вам нужно, - это создавать новый SwingWorker для каждого нажатия кнопки «Пуск», если вы действительно хотите порождать еще один экземпляр действия каждый раз .

...