Java 鼠标事件处理以创建新的填充JFrames

Java 鼠标事件处理以创建新的填充JFrames,java,swing,mouseevent,Java,Swing,Mouseevent,我看到一些我真的不理解的行为。在第一段代码中,当调用run()时,会弹出JFrames,并填充JPanel。在第二段代码中,会弹出JFrames,但JFrames不会填充,窗口似乎不负责任 final Class g = TowerView.class final ArrayList<Class> s = (ArrayList<Class>) sorters.clone(); final Quantifiable [] d = InventoryItem.getRando

我看到一些我真的不理解的行为。在第一段代码中,当调用run()时,会弹出JFrames,并填充JPanel。在第二段代码中,会弹出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 s=(ArrayList)sorter.clone();
最终可量化[]d=InventoryItem.getRandomArray(大小);
运行(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);  
    }
});
final Class g=TowerView.Class
final ArrayList s=(ArrayList)sorter.clone();
最终可量化[]d=InventoryItem.getRandomArray(大小);
runButton.addMouseListener(新的MouseAdapter(){
@抑制警告(“未选中”)
公共void mouseClicked(MouseEvent事件){
运行(s、g、d);
}
});

您需要在事件侦听器中执行操作,即在另一个线程中运行(s、g、d)命令

摘自

关于事件侦听器,需要记住的最重要的规则是 他们应该很快执行。因为所有的绘画和 事件侦听方法在同一线程中执行,这是一个缓慢的过程 事件监听器方法会使程序看起来反应迟钝 重新粉刷自己。如果您需要执行一些长时间的操作 事件的结果,通过启动另一个线程(或 以某种方式将请求发送到另一个线程)以执行该操作。 有关使用线程的帮助,请参阅Swing中的并发


您需要在事件侦听器内部执行操作,即在另一个线程中运行(s、g、d)命令

摘自

关于事件侦听器,需要记住的最重要的规则是 他们应该很快执行。因为所有的绘画和 事件侦听方法在同一线程中执行,这是一个缓慢的过程 事件监听器方法会使程序看起来反应迟钝 重新粉刷自己。如果您需要执行一些长时间的操作 事件的结果,通过启动另一个线程(或 以某种方式将请求发送到另一个线程)以执行该操作。 有关使用线程的帮助,请参阅Swing中的并发


我刚想好怎么做。。。我一直在寻找一些写着“接受”的东西,我同意线程可能是一个问题,但是如果没有更多的信息,很难猜测代码会在哪里陷入困境。我只是想出了如何做。。。我一直在寻找“接受”这个词。我同意线程可能是一个问题,但如果没有更多信息,很难猜测代码会在哪里陷入困境。+1,另请参阅以获取更多信息和与Swing相关的解决方案。+1,另请参阅以获取更多信息和与Swing相关的解决方案。