2010-08-22 77 views
3

問候,功能在Java中沒有完成

這是我的第一個問題,我只是做節目作爲一種業餘愛好想幫我的時候,所以請記住這一點。

我有一個函數試圖讀取十字線的中心點。像遊戲中的位置查找器。代碼如下所示:

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 2010-08-22 10:24:07

+0

取決於圖像的大小,這可能會非常緩慢。你有沒有試過把一個System.out.println放到循環中,看看它是否真的停止運行或者只運行很長時間? – Nicolas78 2010-08-22 10:27:58

+0

另外,RADAR_ [BOTTOM,...]的值是多少,圖像的大小是多少?是否有機會開始尋找實際圖像尺寸以外的RGB值?如果事情發生了特別的錯誤,我可以通過鏡像來鎖定程序。 – Nicolas78 2010-08-22 10:30:58

回答

1

問題是,位置函數被第二個函數調用,這第二個函數是在一個case語句裏,我錯過了休息。這就是爲什麼應用程序「卡住」了。

0

您確定Main.RADAR_TOP小於Main.RADAR_BOTTOM嗎? 否則,forloop應該旋轉一段時間(很長一段時間..)