2014-12-27 6 views
0

나는이 GUI가 화면 상단에서 떨어지는 곳에서 만들고이 단어를 생성자에서 다음과 같은 코드를 사용하여 100 밀리 초마다 한 단위 씩 이동합니다. . 그러나 프로그램을 실행하면 처음에는 화면의 처음이 아니라 400이라는 단어가 나타납니다. 나는 연속적인 시간에 y 값을 업데이트 할 수있는 특정 메소드가 있다고 가정한다. 감사!떨어지는 단어가 예상 결과를 제공하지 않음

while(y <= 400){ 
     y++; 
     repaint(); 
     try { 
      TimeUnit.MILLISECONDS.sleep(100); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(Painting.class.getName()).log(Level.SEVERE, null, ex); 
     } 
} 
+0

를? 그것은 귀하의 발췌 문장에서 일종의 실종입니다. – usr2564301

+0

나는 y = 20으로 시작했는데 그것은 임의적이다. – user19164

+0

_ EDT에서 잠을 자지 않는다; _do_ [* 동시 실행 *] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/) 및 [* 스윙 타이머 사용 방법 *] (http://docs.oracle.com/ javase/tutorial/uiswing/misc/timer.html). – trashgod

답변

0

스레드가 원하는 결과를 취할 수있는 가장 좋은 방법이 아닙니다 자고, 대신 Timer를 사용 : '시작 y` 않습니다 어떤 값으로

Timer timer = new Timer(100, new ActionListener() { //100 is the delay time between each interval 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      repaint(); 
      y ++; 
      if (y > 400) { 
       ((Timer) e.getSource()).stop(); 
      } 
     } 
    }); 
    timer.start(); 
관련 문제