У меня был код, который сделал распечатку в swingworker. Я не получал распечатки, поэтому использовал SwingUtilities.invokeLater
, и теперь он работает. Я не ожидал этого результата, как это произошло? Я бы подумал, что System.out.println
может работать за пределами EDT.Должно ли system.out.println быть на edt?
ответ
Это было бы довольно легко проверить (не сказать, даже вводить весь код, чтобы проверить это меньше работы, то разместить его здесь):
import java.awt.EventQueue;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello world");
System.out.println(EventQueue.isDispatchThread());
}
}
приводит
Hello world
false
на консоли.
Так что да, System.out.println
могут быть использованы за пределами EDT
У меня бы возникла мысль system.out.println за пределами edt.
Это правда. Чтобы проверить это, создайте поток, в который вы помещаете петлю и распечатку, и убедитесь сами:
System.out.println запускается за пределами edt. Вы запустили его, когда запустили его с помощью swingworker. Теоретически вы всегда сможете просто распечатать результаты прямо из своего кодового блока. я предлагаю:
Runnable runnable = new Runnable() {
public void run() {
}
};
SwingUtilities.invokeLater(runnable);
Хотя может, это имеет очень мало приложений вне отладки.
пример для альтернативного вывода будет JOptionPane:
JOptionPane.showMessageDialog(frame/* sets up the message, can also be replaced with null to remove formatting*/,
"Eggs are not supposed to be green."/* this is your main message*/,
"A plain message"/* this is what shows in the title spot (first parameter must not be null)*/,
JOptionPane.PLAIN_MESSAGE/*shows no icon, also replacable with WARNING_MESSAGE, ERROR_MESSAGE, INFORMATION_MESSAGE*/);
все, что бы на одной линии, но я сломал его для форматирования здесь версии одна строка:
JOptionPane.showMessageDialog(frame/* sets up the message, can also be replaced with null to remove formatting*/, "Eggs are not supposed to be green."/* this is your main message*/, "A plain message"/* this is what shows in the title spot (first parameter must not be null)*/, JOptionPane.PLAIN_MESSAGE/*shows no icon, also replacable with WARNING_MESSAGE, ERROR_MESSAGE, INFORMATION_MESSAGE*/);
без комментарии:
JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.", "A plain message", JOptionPane.PLAIN_MESSAGE);
Приятно тронуть своих учителей Доктор Сьюз цитирует ваши программы.
Что-то еще не так. System.out.println (...) не заботится о том, в какой поток он вызван, и только вызовы метода Swing * необходимо вызвать в потоке событий Swing. –
nooo System.out.println ... это _root всего зла, а также уродливый, как ад. Вы можете выбрать как минимум 3 простых в установке, легкие фреймворки регистрации в java. (slf4j, log4j, logback и т. д.) –
Вы не сможете получить лучшую помощь без размещения кода. –