为所有现有子线程更改相同的变量

Changing the same variable for all existing subthreads

如果之前有人问过这个问题,请提前致歉。我真的试图找到对我有帮助的东西。遗憾的是我没有运气。

这是我的情况:

我有一个带有按钮和滑块的框架 class。我有一个线程 class。使用框架 class 中的按钮,我创建了线程 class 的实例。线程的一个实例 class 代表一张图片。所有的子线程(图片)都将显示在同一帧中并以一定的间隔移动。

这是我的问题:

滑块控制运动画面的间隔。所以他们移动得更快或更慢。所有图片都应该同时变快或变慢。不幸的是,只有第一个创建的线程会受到滑块的影响。同样的问题是我的 ComponentAdapter 有他的 componentResized 功能。所有线程(或图片)都应该相对于帧大小同时变大或变小。

在这里,我将尝试大致向您展示我是如何做的:

帧class:

//The actionPerformed for the button that keeps creating threads
//Every thread is a picture (ant in this case) that
// moves through the same field of buttons
public void actionPerformed(ActionEvent e){
    a = new AmeiseThread(this);
    a.start();
}


// The slider in the frame.When it changes, also the picture movement speed    changes

sliderKind.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            JSlider source = (JSlider) e.getSource();
            if (!source.getValueIsAdjusting()) {
                int speed = source.getValue();
                a.sleeptime = 1000 / speed;
            }

        }
    });


// Whenever the Frame gets resized, it will change the Pictures
// on its buttons relatively to its new size

class MyComponentAdapter extends ComponentAdapter {
     public void componentResized(ComponentEvent e) {

            xScale = jbArray.get(1).getSize().width;
            yScale = jbArray.get(1).getSize().height;

            a.ameisen.clear();

            a.ameisen.add(new ImageIcon(new ImageIcon("ameise.gif").getImage()
                    .getScaledInstance(xScale, yScale, Image.SCALE_SMOOTH)));
            a.ameisen.add(new ImageIcon(new ImageIcon("ameise90.gif").getImage()
                    .getScaledInstance(xScale, yScale, Image.SCALE_SMOOTH)));
            a.ameisen.add(new ImageIcon(new ImageIcon("ameise180.gif").getImage()
                    .getScaledInstance(xScale, yScale, Image.SCALE_SMOOTH)));
            a.ameisen.add(new ImageIcon(new ImageIcon("ameise270.gif").getImage()
                    .getScaledInstance(xScale, yScale, Image.SCALE_SMOOTH)));
    }
}

我想不出在我的线程 class 中写的任何内容可能会引起您的兴趣。我认为问题出在我已经 posted 的代码中的某处。但是,如果您确实需要更多信息,请发表评论,我会立即 post 更多信息。

再次抱歉,如果该问题已经存在。我觉得它确实如此,因为它听起来很简单。虽然我真的试图找到类似的问题,但我没有运气。

保存您创建的所有线程

 threadList.add(a);

当滑块改变时迭代它

 for (AmeiseThread a: threadList)
    if (!source.getValueIsAdjusting()) {
            int speed = source.getValue();
            a.sleeptime = 1000 / speed;
    }