class panel extends JPanel
{
void main()
{
component com = new component();
add(com,layout);
trd = new Thread(circle);
trd.start();
}
}
class component extends JPanel implements Runnable
{
public void run()
{
Draw fill = new Draw();
Thread fillTrd = new Thread(fill);
fillTrd.start();
}
public void paint(Graphics g)//까만원 그리기
{
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.black);
g.fillOval(35,25,210,210);
}
}
public class Draw extends JPanel implements Runnable{
public void run()
{
repaint();//이부분이 안됩니다
System.out.println("확인1");
}
public Color color = new Color(255,0,0);
public void paint(Graphics g) //빨간원 그리기
{
System.out.print("확인2");
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(color);
g.fillOval(40,30,200,200);
}
}
소스는 최대한 간략하게 간추렸습니다
panel에 add를 해서 component 클래스의 까만원을 그립니다
이후 fillTrd.start();로 스레드가 실행되면 Draw클래스의 빨간 원으로 repaint되어 색이 바뀌어지는것이 목적입니다
실행을 해 보니 repaint부분은 그냥 지나치는것인지 확인2라는 문구가 안나고오 오로지 확인1만 나옵니다.
원래는 component의 run 메소드 안에서 repaint 처리를 했었는데 run메소드자체를 최대한 빠르게 수행해야 하는지라
처리속도를 조금이나마 줄여보려고 라인을 줄이고 스레드로 나눴습니다
교재에는 별다른 내용이 없고 인터넷에서 찾아보아도 제게 맞는 답이 없어서 이렇게 글을 쓰게 되었습니다
읽어주셔서 감사하고 도움주시면 감사하겠습니다