수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

쓰레드를 이용한 이미지 repaint() 질문입니다..

무들

2023.04.01

요전 질문은 이 게시판과 성격이 맞지 않는것 같아서 자삭했습니다..ㅋ

예를 들어서 점이 다섯개가 있고 이를 A, B, C, D, E라고 했을대.. A - B - C - D - E - A 의 루트로

이동하는 트럭 이미지를 쓰레드를 이용하여 구현하고 있는데요..

-------------------------------------------------------------------------------------------------
if(e.getSource() == b_find) {
isStart = true; // 버튼 이벤트가 발생했을 경우 값을 true로 바꿉니다.

this.SelectionSort(dp, dp.length-1); //포인트를 소트합니다. (dp :DPoint라는 포인트 관리 클래스를 만들었습니다)

for(int i=1; idp.length; i++) {
if(i == dp.length-1) { // 점이 5개 있을 때 dp[4] 와 dp[1]을 비교하기 위해서 만들었습니다.
x1 = dp[i].getX();y1 = dp[i].getY();
x2 = dp[1].getX();y2 = dp[1].getY();

double a = (double)(y2-y1) / (double)(x2-x1); // 기울기
double b = (double)(-a * x1 + y1);//y절편

if(a 0) { // 기울기가 0보다 크면 감소하면서 왼쪽으로 이동합니다
for(int j=x1; j=x2; j--) {
cur_x = j;
cur_y = a*j + b;

this.repaint(); // paint() 메소드 호출
//try {
//Thread.sleep(500);
//} catch(InterruptedException ie) {}
}
}
else { // 기울기가 0보다 작으면 증가하면서 오른쪽으로 이동합니다.
for(int j=x1; j=x2; j++) {
cur_x = j;
cur_y = a*j + b;

this.repaint(); // paint() 메소드 호출
//try {
//Thread.sleep(500);
//
//} catch(InterruptedException ie) {}
}
}

} else { // 일반적인 경우 현재 점과 다음 점 사이의 연산을 수행합니다.
x1 = dp[i].getX();y1 = dp[i].getY();
x2 = dp[i+1].getX();y2 = dp[i+1].getY();

double a = (double)(y2-y1) / (double)(x2-x1);
double b = (double)(-a * x1 + y1);
//System.out.println(( + x1 + , + y1 + ) + { + x2 + , + y2 + ));
//System.out.println((double)(y2-y1) + , + (double)(x2-x1));
//System.out.println(a);
//System.out.println(b);

if(a 0) {
for(int j=x1; j=x2; j--) {
cur_x = j;
cur_y = a*j + b;

this.repaint();
//try {
//Thread.sleep(500);
//} catch(InterruptedException ie) {}
}
}
else {
for(int j=x1; j=x2; j+;=x2; j++) {
cur_x = j;
cur_y = a*j + b;

this.repaint();
//try {
//Thread.sleep(500);
//
//} catch(InterruptedException ie) {}
}
}
}
}

isStart = false;
this.repaint();
}
}
---------------------------------------------------------------------------------------------------------
제가 구현한 paint() 메소드는 다음과 같습니다..
----------------------------------------------------------------------------------------------------------
public void paint(Graphics g) {
g.drawImage(img_back, 5, 5, 780, 580, this); // 화면상에기본 이미지를 뿌립니다.

if(dp != null) { // 좌표클래스가 null 이 아닐때 화면상에 좌표를 뿌려줍니다.
g.drawString(dp[1].getKey(), dp[1].getX()-14, dp[1].getY()+25);
g.setColor(new Color(0,0,255));
g.fillOval(dp[1].getX(), dp[1].getY(), 10, 10);

for(int i=2; idp.length; i++) {
g.setColor(new Color(0,0,0));
g.drawString(dp[i].getKey(), dp[i].getX()-15, dp[i].getY()+25);
g.setColor(new Color(255,0,0));
g.fillOval(dp[i].getX(), dp[i].getY(), 7, 7);
}

if(isStart == true) {// 이부분이 좀 문제인데요.. 위의 이벤트가 발생했을때 isStart를 true로 변경하였습니다.
g.drawImage(img_truck, (int)cur_x, (int)cur_y, 50, 50, this);
}

---------------------------------------------------------------------------------------------------------

결과는 무한루프가 도는지..실행이 멈춰버립니다.. ㅠ repaint()과정에 뭔가 문제가 있는것 같은데...
도움좀 요청할께요.. ^^
}
}
-----------------------------------------------------------------------------------------------------------

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 큰꽃

    지금 소스로 보기에는 Thread를 이용했다고하는 하는데, Thread의 .start() 메소드는 보이지 않습니다.
    Thread는 runnable를 기본적으로 implement를 하고 있구요.
    run() 메소드를 오버라이딩해야 합니다.

    자세한것은 책에서 Thread 관련 부분을 확인하세요~ ^^

  • Hotpants

    음.. 쓰레드를 이용해서 뭔가 변화를 시키려면.. 꼭 runnable을 implement해서 run() 메소드 안에다가 구현해줘하는건가요??

  • 로지

    위의 링크 답변 중에 \창을 리사이즈 시키면 안 될꺼다\ 라는것은 환경에 따라서 다릅니다. ^^
    창이 리사이즈가 된다고 해도, 안에 내용이 안 그려지게 될것입니다.

번호 제 목 글쓴이 날짜
2694950 자바스크립트로 화면에 내용을 뿌려줄때 접근성 (3) 꺆잉 2025-05-16
2694921 보더 레이아웃 안에 플로우 레이아웃 넣는방법? 초롱 2025-05-15
2694894 웹 프로그래밍 관련해서 질문합니다. 창의적 2025-05-15
2694868 컨택트 폼 7에서 textarea 높이 조정 영글 2025-05-15
2694818 line-height값이 적용이 안되는데 왜 그런 거예요?. letter-spacing,line-height의 기준?? (2) 풍란 2025-05-14
2694795 이것 어떻게 좀 해결좀;; (3) 개럭시 2025-05-14
2694724 코딩시 폰트 문제; ㅠ 후력 2025-05-13
2694696 텍스트박스 입력에 관한 문제입니다. 딥공감 2025-05-13
2694668 [질문] 페이퍼비전 PointLight 관련 질문 드려요.. 두바다찬솔 2025-05-13
2694611 Flash Lite 2.1에서 BitmapData와 Matrix 지원안하나요? (3) 이플 2025-05-12
2694582 IE & 파이어폭스 (2) 흙이랑 2025-05-12
2694553 무비클립안의 duplicate 발동이 안돼네요; 딥보라 2025-05-12
2694523 자바 애플릿 질문좀 ^^ (6) 동이 2025-05-12
2694494 [질문] JAVA 또는 C++ 로 프로그램 개발시.. 레지스터리 등록 관련 의문점? (3) 우람늘 2025-05-11
2694469 익스6에서 css버그 나오는것 해결방법좀요 !!!! (6) 원술 2025-05-11
2694442 로컬에선 잘 나오는데 운영에 반영하면 이상하게 나와요. (8) 목화 2025-05-11
2694412 [질문] 이미지 로딩후 사이즈 조절할때 (1) 아담 2025-05-11
2694391 설치형 블로그 쓰시는 분들 어떤거 쓰세요?? (7) AngelsTears 2025-05-10
2694362 Microsoft SQL Server에서 서버만드는법 어둠 2025-05-10
2694333 for문으로 돌린 이름의 제어 (4) 레이 2025-05-10
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com