2012-06-28 2 views
2

У меня был код, который сделал распечатку в swingworker. Я не получал распечатки, поэтому использовал SwingUtilities.invokeLater, и теперь он работает. Я не ожидал этого результата, как это произошло? Я бы подумал, что System.out.println может работать за пределами EDT.Должно ли system.out.println быть на edt?

+1

Что-то еще не так. System.out.println (...) не заботится о том, в какой поток он вызван, и только вызовы метода Swing * необходимо вызвать в потоке событий Swing. –

+2

nooo System.out.println ... это _root всего зла, а также уродливый, как ад. Вы можете выбрать как минимум 3 простых в установке, легкие фреймворки регистрации в java. (slf4j, log4j, logback и т. д.) –

+1

Вы не сможете получить лучшую помощь без размещения кода. –

ответ

2

Это было бы довольно легко проверить (не сказать, даже вводить весь код, чтобы проверить это меньше работы, то разместить его здесь):

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

1

У меня бы возникла мысль system.out.println за пределами edt.

Это правда. Чтобы проверить это, создайте поток, в который вы помещаете петлю и распечатку, и убедитесь сами:

0

System.out.println запускается за пределами edt. Вы запустили его, когда запустили его с помощью swingworker. Теоретически вы всегда сможете просто распечатать результаты прямо из своего кодового блока. я предлагаю:

Runnable runnable = new Runnable() { 

     public void run() { 

     } 
    }; 
SwingUtilities.invokeLater(runnable); 
0

Хотя может, это имеет очень мало приложений вне отладки.

пример для альтернативного вывода будет 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); 

Приятно тронуть своих учителей Доктор Сьюз цитирует ваши программы.

Смежные вопросы