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

时间:2015-05-16 19:17:36

标签: java multithreading resize synchronized

如果这个问题在某处之前被问到,请提前抱歉。我真的试图找到有助于我的东西。可悲的是,我没有运气。

以下是我的情况:

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

这是我的问题:

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

在这里,我将尽力向您展示我的工作方式:

框架类:

//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)));
    }
}

我无法想到在我的线程类中编写的任何内容,这可能是有意义的。我认为问题出在我已经发布的代码中。但如果您确实需要更多信息,请对其进行评论,我会立即发布更多信息。

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

1 个答案:

答案 0 :(得分:1)

保存您创建的所有主题

 threadList.add(a);
当滑块改变

时,

it itrate

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