2012-05-20 4 views
0

다음 코드는 각 루프를 렌더링해야하지만 사각형은 렌더링하지만 이동하지 않습니다. 문제는 당신이Java Paint 구성 요소가 작동하지 않습니다.

package com.game; 

import java.awt.*; 
import javax.swing.*; 

public class Core implements Runnable{ 
    private static boolean running = true; 
    public static JFrame frame = new JFrame(); 
    public static void main(String[] args) { 
     frame.setResizable(false); 
     frame.setBounds(100,100,600,400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     start(); 
    } 





package com.game; 

import java.awt.Graphics; 

import javax.swing.JPanel; 

public class Paint extends JPanel{ 
    public static int x = 10; 
    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 

     g.fillRect(x,10,100,100); 
    } 
} 


     private static void start() { 
      running = true; 
      Thread thread = new Thread(new Core()); 
      thread.setPriority(Thread.MAX_PRIORITY); 
      thread.start(); 
     } 

     @Override 
     public void run() { 
      Paint p = new Paint(); 
      Container pane = frame.getContentPane(); 
      while(running){ 
       pane.add(p); 
       pane.show(); 

       System.out.println(Paint.x); 
      try { 
       Thread.sleep(100); 
      } catch (Exception e){} 
     } 
     } 
    } 

코드가 어떤 식 으로든 성가신 경우 죄송합니다, 나는 그것을 포맷하는 방법을 잘 모르겠어요 ...

+0

코드에 문제가 있습니다 - 너무 많은 중괄호 ... – home

+0

코드가 잘못 게시되었습니다. 실수로 한 클래스를 다른 클래스에 게시 한 것으로 보입니다. –

+0

컨테이너에 구성 요소를 반복해서 추가하는 것을 포함하여 코드에 많은 문제가 있으므로 스윙 튜토리얼을 읽는 것이 좋습니다. –

답변

1

실행()에서, 코어 클래스에있는 것으로 나타납니다 x을 변경하지 않는 이유는 무엇입니까?

또한 프레임에 페인트 (사용자의 JPanel 하위 클래스)를 추가하고 표시하는 작업이 끊임없이 (10 회) 있습니다.

주 메서드 (또는 더 나은 곳)에 한 번 추가하고 표시하고 해당 루프 대신 repaint()을 호출하기 만하면됩니다.

그리고 사용하지 마십시오. thread.setPriority(Thread.MAX_PRIORITY); 거의 수행하지 않으며, 아마도 원하는 것이 아닙니다. - GUI를 그리기 및 사용자와의 상호 작용

while(running){ 
    pane.add(p); 
    pane.show(); 
    //.... 
} 

하면 스윙 이벤트 스레드에서 스테핑과의 작업을 수행에서이 스레드를 방해 :

+0

감사합니다. 나는 "x ++; 사고로 while 회 돌이에 ... – user1294270

3

당신은 while (running) 루프입니다. while (true) 루프를 사용하지 말고 Swing 응용 프로그램에서 반복적 인 동작을 원하면 Swing Timer를 사용하십시오.

관련 문제