Печать промежуточных шагов в замораживании Java - PullRequest
0 голосов
/ 02 ноября 2011

Я пишу Java-приложение, которое шифрует и дешифрует ввод с помощью алгоритма DES. Сначала я сделал это без графического интерфейса и напечатал промежуточные шаги в окне вывода, используя System.out.print();. Когда ввод велик, вычисления могут занять некоторое время, но при использовании окна вывода промежуточные шаги были напечатаны один за другим, пока он вычислялся. Это было прекрасно.

Теперь я создал графический интерфейс для своей программы, используя JTextArea, с именем txtDebug для печати промежуточных шагов:

public static void debug(String tekst){
txtDebug.setText(txtDebug.getText()+tekst+"\n");}

Проблема: промежуточные шаги больше не печатаются один за другим. Если ввод велик, программа просто зависает и ничего не делает, пока все вычисления не будут завершены, а затем печатает все промежуточные шаги сразу.

Другая проблема: когда я не использовал графический интерфейс, программа никогда не вылетала, теперь, если ввод достаточно большой, программа вылетает: она зависает и просто никогда не возвращается к жизни.

Любая помощь, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Интерфейс пользователя зависает, потому что вы выполняете длительные вычисления в потоке диспетчеризации событий, который отвечает за обработку событий и перерисовку пользовательского интерфейса. Чтобы избежать этой проблемы, рассмотрите возможность выполнения шифрования / дешифрования в фоновом потоке, возможно, используя SwingWorker.

Что касается второго пункта о том, что пользовательский интерфейс никогда не возвращается к жизни, это может указывать на другую проблему с ресурсами (например, память). Возможно, вы захотите запустить профилировщик или JConsole, чтобы увидеть состояние каждого потока при возникновении этой проблемы.

2 голосов
/ 02 ноября 2011

Вы должны выполнять работу в фоновом рабочем потоке. Выполнение этого в основном потоке не позволит Swing обрабатывать события -> пользовательский интерфейс будет блокироваться.

...