2011-04-28 60 views
0

此jSlider代碼導致應用程序掛起。jSlider代碼導致應用程序掛起

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here:    
     try { 
       for(int i=0;i<100;i++) 
       { 
      jSlider1.setValue(i); 
      Thread.sleep(3000); 
       } 
     } catch (InterruptedException ex) { 
      Logger.getLogger(AsdView.class.getName()).log(Level.SEVERE, null, ex); 
     }    
} 

感謝你們我更新了答案

Timer time = new Timer(100, new ActionListener() { 
        int percent = 0; 

       @Override 
       public void actionPerformed(ActionEvent e) { 
         percent++; 
         if (percent>100) 
           percent = 0; 

        jSlider1.setValue((int)(100*(percent/600.0))); 
       } 
     }); 
     time.start(); 
+1

拼寫爲「why」,而不是「y」。請不要在SO上使用l33t-sp34k。 – EboMike 2011-04-28 16:37:30

+0

那麼你每循環迭代3秒鐘(共5分鐘!),你就睡3秒鐘。可能這就是爲什麼它掛着? – CoolBeans 2011-04-28 16:37:39

+0

滑塊應該向右移動?像進度條? – ramya 2011-04-28 16:38:51

回答

1

我猜你正在嘗試做一些平滑滾動的。

由於執行Thread.sleep(3000)的事件線程正在被凍結,因爲處理窗口繪畫,大小調整等的事件線程會凍結100次。

我建議您使用一個一點一點改變滾動條的Swing timer

+0

真正可以給我一個樣品 – ramya 2011-04-28 16:43:55

+0

定時器時間=新定時器(100,新的ActionListener(){ INT百分比= 0; @Override 公共無效的actionPerformed(ActionEvent的發送){ 百分比++; 如果(百分比> 100 ) percent = 0; jSlider1.setValue((int)(100 *(percent/600.0))); } }); time.start(); – ramya 2011-04-28 16:50:03

0

我不知道爲什麼你把睡眠3秒,並且也爲100 3 * 100 = 5分鐘循環,這樣就掛掉高達5分鐘 刪除了Thread.sleep(3000);

它會正常工作,不會掛

0

當你說你的應用程序「掛起」,這通常意味着你有某種僵局,防止您的線程取得進展。這是你在你的程序中觀察到的嗎?按照當前寫入的方式,當前的執行線程將至少需要300秒才能完成。這項工作是在主執行線程上完成的嗎?如果是這樣,你可能要考慮創建一個新的線程來完成這項工作。

相關問題