나는 튀는 여러 공에 관한 학교 프로젝트를 진행하고 있습니다. 지금까지, 나는 그 앱을 만들 수 있었고 모든 것은 괜찮습니다. 그러나, 나는 또한 응용 프로그램에서 멀티 스레딩을 구현해야하며 이것은 내가 붙어있는 곳이다. 나는 하나의 공 하나의 스레드를 생각하고 있었지만 그것을 구현하는 방법에 대해서는 확신이 없습니다. 클래스 공멀티 스레딩 멀티 볼 게임
public void paintComponent(Graphics g)
{
super.paintComponent(g);
//The balls are painted only after the timer is started
if(bTimer)
{
for(Ball ball:ballList.ballsArrayList)
{
Thread ballThread = new Thread(ball);
ballThread.start();
ball.draw(g);
/*other code for moving the ball*/
}
}
}
: 여기 내 코드 (일부)까지입니다
public void draw(Graphics g) {
Color color = new Color(this.getColorR(),this.getColorG(),this.getColorB());
g.setColor(color);
int radius = this.getsize();
g.fillOval((int)(this.getX() - radius), (int)(this.getY() - radius), (int)(2 *
radius), (int)(2 * radius));
}
public void run() {
String name = Thread.currentThread().getName();
for (int i = 0; i < 200; i++) {
//ball.draw(g); ??
try {
Thread.sleep(50);
System.out.println("Sleeping");
} catch (Exception ex) {}
}
}
내가가 실행() 함수에서 ball.draw() 함수를 넣을 수 있다고 생각했다 실. 그러나 나는 그것을 어떻게 할 수 있는지 또는 그것이 좋은 생각인지는 모른다. 나를 이해하고 = ((
스레드 당 하나의 공이있는 것은 확실히 과잉입니다. 수천 개의 볼을 가질 수 있습니다! 하나의 스레드에서 모든 볼을 순차적으로 처리하십시오. – Vlad
디자인 상 스윙이 항상 다중 스레드되지 않습니까? – Burkhard
어쨌든, 비즈니스 로직을 페인트 기능에 넣지 마십시오! 볼을 관리하는 비즈니스 로직, 모든 물리를 포함하는 모델, 결과 만 표시하는 UI를 분리해야합니다. – Vlad