2010-08-22 5 views
3

Salutations,Fonction en java ne se termine pas

ceci est ma première question et je fais juste la programmation comme un passe-temps donc garder à l'esprit que lorsque vous essayez de me aider, s'il vous plaît.

J'ai une fonction qui essaie de lire le point central d'un réticule. Quelque chose comme un localisateur de position dans un jeu. Le code ressemble à ceci:

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; 
    } 

Ce qui se passe est que parfois, cette fonction ne fonctionne tout simplement pas le contrôle à retourner l'application principale. Fondamentalement, il reste coincé en cours d'exécution. Par conséquent, le dernier commentaire dans la fonction pour faire une vérification. J'ai d'abord pensé que cela avait peut-être quelque chose à voir avec la lecture des membres statiques de la classe où réside la fonction, alors j'ai commenté ceux-ci comme vous pouvez le voir à la fin. Le problème se produit quand même.

Je ne peux pas vraiment voir ou penser à aucune raison pour ce comportement. J'apprécierai beaucoup les idées ou les commentaires qui pourraient me signaler une erreur ou quelque chose.

+1

Avez-vous essayé de commenter d'autres parties du code? Je suspecterais normalement les boucles, mais elles ont l'air correct à première vue ... – Stephen

+0

en fonction de la taille de votre image, cela peut simplement être très lent. Avez-vous essayé de placer un System.out.println dans les boucles et de voir si ça s'arrête vraiment ou s'il fonctionne depuis très longtemps? – Nicolas78

+0

aussi, quelles sont les valeurs de RADAR_ [BOTTOM, ...], et quelle est la taille de votre image? Y a-t-il une chance que vous commenciez à rechercher des valeurs RVB en dehors de vos dimensions d'image réelles? Je pourrais faire une image qui pourrait bloquer le programme si quelque chose ne va pas très bien. – Nicolas78

Répondre

1

Le problème était que la fonction de localisation était appelée par une deuxième fonction et cette deuxième fonction était dans une instruction case où j'ai manqué la pause. C'est pourquoi l'application "s'est coincée".

0

Etes-vous sûr que Main.RADAR_TOP est inférieur à Main.RADAR_BOTTOM? Sinon le forloop devrait tourner pendant un moment (un long moment ..)

Questions connexes