Сканирование штрих-кода в Java-приложение периодически прерывается на встроенных символах управления вкладками - PullRequest
1 голос
/ 30 марта 2012

У меня есть приложение Java Swing, которое имеет форму, которую я заполняю, сканируя штрих-код, содержащий данные с разделителями табуляции (или $ I), как ввод с клавиатуры через USB-соединение.Периодически текстовые поля формы заполняются неправильно, поэтому кажется, что вкладка обрабатывается слишком поздно.Например, если набор данных в штрих-коде похож на «abc $ Idef», ожидаемый результат будет «abc» в 1-м текстовом поле и «def» во 2-м текстовом поле.Вместо этого мы иногда видим «abcde» в 1-м текстовом поле и «f» во 2-м или даже все данные в 1-м текстовом поле и ничего во 2-м.

Я видел, что эта проблема проявляется по-разномуЧастоты в разные дни.Сегодня может быть хорошо, и я вижу, как это происходит 1 из каждых 150 попыток.Вчера это могло быть плохо, случалось 1 из 10 попыток.Сканер имеет заводские настройки по умолчанию или близкие к ним, за исключением того, что я переключил параметр для реализации разделителя табуляции и $ I.Я также пытался замедлить скорость передачи, и хотя это, по-видимому, уменьшает частоту событий, это не устраняет их, и замедленная скорость не идеальна для рабочего процесса пользователя, поэтому сбросьте его на полную скорость.

Я сомневаюсь, что проблема заключается в сканере, однако.в приложении я попытался отключить все проверки текстового поля и резервные копии данных, чтобы по существу удалить любой пользовательский код, который может вызвать некоторую задержку, но периодически возникающая проблема все еще существует.В настоящее время приложение работает на WinXPSP3 с использованием JRE 1.5.0_18.Сканер представляет собой модель Symbol ds6707.Я мог бы использовать некоторые рекомендации для дальнейшего изучения этой проблемы, чтобы определить, в чем проблема.

1 Ответ

1 голос
/ 16 апреля 2012

Подумайте о том, чтобы прочитать поток в отдельном потоке и разместить завершенные блоки в EventQueue.Это обеспечит поступление событий «последовательно… в том же порядке, в котором они поставлены в очередь».SwingWorker удобно для этого, так как метод process() выполняется "асинхронно в потоке диспетчеризации событий ."

...