Я пытаюсь создать текстовую игру с графическим интерфейсом пользователя на Java, и мне нужно использовать SwingWorker. Однако я не понимаю ни одного из руководств, и для меня это просто не имеет смысла :(.
public void write(String msg){
int i=0;
while(true){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
console.setText(console.getText()+ msg.charAt(i));
if(i==msg.length()){
console.setText(console.getText()+ newline);
break;
}
}
}
По сути, я пытаюсь передать строку методу и распечатать ее char за char, однако я не могу, поскольку sleep () прерывает EDT и блокирует графический интерфейс для msg.length () * 400 мс :(.
Если у кого-то есть кодовое решение с использованием SwingWorker, я был бы благодарен :)
1 ответ
Вы можете попробовать это просто, чтобы понять, как использовать swingworker с некоторой строкой:
public void runInBackgroud(final String msg)
{
SwingWorker<Object, Object> task = new SwingWorker<Object, Object> ( )
{
public Object doInBackground()
{
write(msg);
return null;
}
public void done()
{}
};
task.execute ( );
}
И просто вызовите этот метод runInBackgroud(msg);
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
while(true){
- это бесконечный цикл, я видел тамbreak;
, но лучше было бы изменитьtrue
на локальную переменную, чтобы лучше помогать быстрее публиковать SSCCE, короткий, работоспособный, компилируемый, почти у меня проблема,JFrame
,JTextArea
иSwingWorker
со значением изRandom
, на этом форуме есть коды (в форме SSCCE) около 35 - 50 строк об одной и той же проблемеdoInBackground()
SwingWorker