2010-08-22 2 views
3

인사말,자바에서 함수가 끝나지 않았습니다

이것은 내 첫 번째 질문이며, 취미로 프로그래밍하므로 취미로 프로그래밍하면 도움이됩니다.

십자형의 중심점을 읽는 기능이 있습니다. 게임에서의 위치 찾기와 같은 것. 코드는 다음과 같습니다.

public static Point location(BufferedImage image) { 
     int pixelLeft; 
     int pixelTop; 
     Point point = new Point(); 

     for (int i = Main.RADAR_TOP+1; i < Main.RADAR_BOTTOM; i++) { 
      pixelLeft = image.getRGB(Main.RADAR_LEFT+7, i); 
      if ((((pixelLeft>>16) & 0xff) > 35 && 
        ((pixelLeft>>8) & 0xff) > 35 && 
        ((pixelLeft) & 0xff) > 35)){ 
       point.y = i; 
       break; 
      } 
     } 

     for (int j = Main.RADAR_LEFT+1; j < Main.RADAR_RIGHT; j++) { 
      pixelTop = image.getRGB(j, Main.RADAR_TOP+5); 
      if ((((pixelTop>>16) & 0xff) > 35 && 
        ((pixelTop>>8) & 0xff) > 35 && 
        ((pixelTop) & 0xff) > 35)){ 
       point.x = j; 
       break; 
      } 
     } 

     System.out.println("location: "+point.x+","+point.y); 
/**  lastX = point.x; 
     lastY = point.y;*/ 
     return point; 
    } 

이 기능은 때때로 주 응용 프로그램으로 제어를 반환하지 않습니다. 기본적으로 멈추게됩니다. 따라서 함수의 마지막 주석은 검사를 수행합니다. 먼저 함수가있는 클래스의 정적 멤버를 읽는 것과 관련이 있다고 생각 했으므로 끝에 보았 듯이 주석을 달았습니다. 그러나 문제는 여전히 발생합니다.

이 동작에 대한 이유를 실제로 볼 수 없거나 생각할 수 없습니다. 저에게 실수 나 다른 것을 지적 할 수있는 의견이나 의견을 많이 주시면 감사하겠습니다.

+1

코드의 다른 부분을 주석 처리 해 보셨습니까? 나는 일반적으로 루프를 의심하지만, 그들은 언뜻 보면 괜찮아 보입니다 ... – Stephen

+0

이미지의 크기에 따라, 이것은 단순히 매우 느릴 수 있습니다. System.out.println을 루프에 넣고 실제로 실행을 멈추었는지 아니면 매우 오랜 시간 동안 만 실행했는지 확인해 보았습니까? – Nicolas78

+0

또한 RADAR_ [BOTTOM, ...]의 값은 무엇이며 이미지의 크기는 얼마입니까? 실제 이미지 크기를 벗어난 RGB 값을 찾기 시작할 수 있습니까? 뭔가 잘못되어 가면 프로그램을 잠글 수있는 상상할 수 있습니다. – Nicolas78

답변

1

문제는 위치 함수가 두 번째 함수에 의해 호출되었으며이 두 번째 함수가 중단을 놓친 case 문 안에 있다는 것이 문제였습니다. 그래서 응용 프로그램이 "막혔습니다".

0

Main.RADAR_TOP이 Main.RADAR_BOTTOM보다 작습니까? 그렇지 않으면 forloop이 잠시 동안 회전해야합니다. (길긴 ..)

관련 문제