2015-05-16 4 views
2

Извините заранее, если этот вопрос задали раньше. Я действительно пытался найти то, что мне помогает. К сожалению, мне не повезло.Изменение одной и той же переменной для всех существующих подпроцессов

Вот моя ситуация:

У меня есть класс кадров с кнопкой и ползунком. И у меня класс потоков. С помощью кнопки в классе фрейма я создаю экземпляры класса потока. Один экземпляр класса потока представляет собой изображение. Все субтитры (изображения) будут отображаться в одном кадре и перемещаться с определенным интервалом.

Вот моя проблема:

Ползунок Controles интервал движущихся изображений. Таким образом, они движутся быстрее или медленнее. Все снимки должны быть быстрее или медленнее. К несчастью, только слайдер влияет только на первый созданный поток. Такая же проблема связана с моим 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))); 
    } 
} 

Я не могу думать ни о чем, что написано в моем классе нити, которые могут быть представляет интерес. Я думаю, что проблема заключается в моем уже размещенном коде где-то. Но если вам нужна дополнительная информация, прокомментируйте это, и я отправлю вам больше информации.

Извините, если этот вопрос уже существует. Я чувствую, что это так, потому что это звучит довольно просто. Хотя я действительно пытался найти вопрос, подобный этому, но мне не повезло.

+2

вы должны использовать статическое поле или сохранить все темы, созданные вами и itarate на нем, когда ползунок изменен , – igreen

ответ

1

Сохранить все темы создания

threadList.add(a); 

itarate над ним, когда ползунок изменил

for (AmeiseThread a: threadList) 
    if (!source.getValueIsAdjusting()) { 
      int speed = source.getValue(); 
      a.sleeptime = 1000/speed; 
    } 
Смежные вопросы