在一个JPanel上画的10个线程

Łuk*_*szG 3 java swing multithreading rendering jpanel

我在学习Java中的线程时遇到了一些问题.目标是进行模拟,向我们展示兔子在某种类型的板上如何从狼群中奔跑.每只狼和每只兔子都应该成为一个线索.所以我在Test类的main方法中创建了一个GUI,并创建了一个实现Runnable接口的新类.我认为这很容易也很合乎逻辑.但是现在,我如何AddRabbit从这些线程调用该方法?因为非常线程应该像下面这样做:

  1. 更改其属性,如地图上的位置
  2. 检查地图上的其他线程
  3. 在面板上涂漆

但是怎么样?

shi*_*izu 5

不允许直接使用多个线程更新Swing组件 - Swing不是线程安全的.它处理的是一个Swing事件队列,因此如果必须更新现有线程中的JComponent,则将使用以下代码:

//You are currently in a separate thread that's calculating your rabbit positions
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        //Put in code to modify your Swing elements
    }
});
Run Code Online (Sandbox Code Playgroud)

因此,每当您觉得需要更新GUI时,就可以使用SwingUtilities.invokeLater方法将Runnable实例传递到Swing事件队列,该方法将在其自己的线程中处理.