проблема потока приложения Java OpenCV - PullRequest
0 голосов
/ 28 июня 2011

Я разрабатываю своего рода простое противоугонное Java-приложение в качестве университетского проекта.Он записывает сцену через камеру и обнаруживает, когда происходит много изменений в сцене, путем разницы пикселей (вы можете увидеть полные источники здесь: https://github.com/lmammino/movementDetector). Я использую Java-привязки opencv для обработки различных операций, которые мне нужнывыполнять на изображениях.У меня есть некоторые проблемы, потому что я хочу, чтобы пользователь запустил / остановил / перезапустил процесс захвата видео с помощью некоторых кнопок в основном пользовательском интерфейсе.Для захвата видеопотока я использую java opencv классы CanvasFrame и OpenCVFrameGrabber.У меня есть deveoped класс Runnable с именем Detector (полный источник здесь: http://bit.ly/l1Z3tY)

. Класс Detector автоматически запускает новый поток, вызывая его метод запуска:

public void start()
{
    if (this.thread == null)
        this.thread = new Thread(this);

    this.isThreadActive = true;
    this.thread.start();
}

В первый раз, когда я вызываю метод start из экземпляра Detector, все работает нормально. Когда я пытаюсь остановить и перезапустить процесс, он выдает недопустимое исключение состояния потока ...

Так что я думаю, чтоВесь вопрос здесь в следующем: «Каков наилучший способ запустить / остановить / перезапустить поток?»

TNX

1 Ответ

2 голосов
/ 28 июня 2011

Является ли объект, который вы останавливаете / перезапускаете, на самом деле Runnable, или это Thread?Если я правильно помню, вы можете запустить поток только один раз.Если вы хотите запустить его более одного раза, вам нужно запустить Runnable несколько раз, а не Thread.

Из документации Thread: It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.

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