Обработка событий мыши для создания новых заполненных JFrames - PullRequest
1 голос
/ 19 ноября 2011

Я вижу какое-то поведение, которого я действительно не понимаю.В первом бите кода, когда вызывается run (), всплывают JFrames и заполняются JPanels.Во втором бите кода всплывают JFrames, но JFrames не заполняются, и окна кажутся не отвечающими.

final Class g = TowerView.class
final ArrayList<Class> s = (ArrayList<Class>) sorters.clone();
final Quantifiable [] d = InventoryItem.getRandomArray(SIZE); 
run (s, g, d);

Это НЕ работает:

final Class g = TowerView.class
final ArrayList<Class> s = (ArrayList<Class>) sorters.clone();
final Quantifiable [] d = InventoryItem.getRandomArray(SIZE); 
runButton.addMouseListener(new MouseAdapter() {
    @SuppressWarnings("unchecked")
    public void mouseClicked(MouseEvent event) {
        run(s, g, d);  
    }
});

1 Ответ

4 голосов
/ 19 ноября 2011

Вам необходимо выполнить операцию внутри прослушивателя событий, т.е. запустить команду (s, g, d) в другом потоке.

Выдержка из http://docs.oracle.com/javase/tutorial/uiswing/events/generalrules.html

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...