我有这样的代码:循环代码导致堆栈溢出
public static void Detect (String[] args) throws Exception {
PointerInfo pointer; /* needed for getting cursor location */
pointer = MouseInfo.getPointerInfo();
Point coord = pointer.getLocation();
Robot cursor = new Robot(); /*Creates a new robot */
cursor.delay(500); /* robot delay */
/**
* detection method
* Works by looking at pixel color underneath mouse.
* If RED is over > a value and GREEN is under < a value then loop
* If criteria is not matched go to Something
*/
while(true) {
coord = MouseInfo.getPointerInfo().getLocation();
Color color = cursor.getPixelColor((int)coord.getX(), (int)coord.getY());
if(color.getRed() >= 75 && color.getGreen() < 100){
Detect(args);
}
else{
System.out.println(color);
Something(args);
}
cursor.delay(1000);
}
}
而且我知道这可能是最糟糕的实现成为可能。调用void来创建循环会导致堆栈溢出。有人可以请解释我如何使整个代码段做同样的事情,但循环使用“while”?
这里是者均基于堆栈跟踪:
Exception in thread "main" java.lang.StackOverflowError
at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)
at java.awt.MouseInfo.areScreenDevicesIndependent(Unknown Source)
at java.awt.MouseInfo.getPointerInfo(Unknown Source)
at com.meganukebmp.Main.Detect(Main.java:29)
at com.meganukebmp.Main.Detect(Main.java:45)
at com.meganukebmp.Main.Detect(Main.java:45)
at com.meganukebmp.Main.Detect(Main.java:45)
at com.meganukebmp.Main.Detect(Main.java:45)
at com.meganukebmp.Main.Detect(Main.java:45)
at com.meganukebmp.Main.Detect(Main.java:45)
at com.meganukebmp.Main.Detect(Main.java:45)
at com.meganukebmp.Main.Detect(Main.java:45)
at com.meganukebmp.Main.Detect(Main.java:45)
at com.meganukebmp.Main.Detect(Main.java:45)
向我们展示stacktrace! –
@ArshadAli补充说。 – meganukebmp
你可以用你收到的相同参数调用'Detect(args)'。显然这会造成无限循环。你必须用不同的参数来调用它(即创建一个参数副本,然后修改/减少该副本)。 – hoijui