Java: вызов статического метода, но ничего не происходит? - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть класс с именем GUI, который в основном создает latout, используя Swing.В этом классе у меня есть метод с именем «log», который должен добавить новую строку к текстовой области в макете.

Проблема в том, что всякий раз, когда я вызываю функцию извне класса GUI, ничего не происходит,Если я вызываю метод из класса, он добавляет строку к текстовой области, как и положено.

Я установил метод и все переменные, которые он вызывает, в public static, и я не получил никакойошибки.Он просто ничего не делает, когда я вызываю метод извне.

Есть идеи?

Редактировать:

Вот метод в классе GUI:

public static void log(String inputString) {
    logConsole.append(inputString + "\r\n");
}

В нижней части класса Swing объявлена ​​текстовая область, и я просто изменил ее, чтобы она стала общедоступной статической, а не частной.

public static javax.swing.JTextArea logConsole;

Не могу опубликовать больше кода, надеюсь, этохоть немного полезно?: /

1 Ответ

8 голосов
/ 06 сентября 2011

Скорее всего, это проблема параллелизма с Swing. Поскольку Swing является однопоточным, компоненты Swing необходимо изменить в потоке диспетчеризации событий (т. Е. EDT). Для получения дополнительной информации см. Параллельность в Swing .


РЕДАКТИРОВАТЬ -

Если это действительно проблема параллелизма, тогда одним быстрым обходным путем будет использование SwingUtilities. В частности, isEventDispatchThread() и invokeLater(...). Например,

if(!SwingUtilities.isEventDispatchThread()){
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run(){
            GUI.log("foo"); // modify textarea in EDT
        }
    });
}
else{
    // your problem lies elsewhere
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...