我正在尝试编写一个检测“空闲”状态的程序,但我没有在代码中看到问题。有人可以帮我一个有用的提示吗?这是我的代码:
package idlestatus;
import java.awt.MouseInfo;
public class Idlestatus {
public static void main(String[] args) throws InterruptedException {
Integer firstPointX = MouseInfo.getPointerInfo().getLocation().x;
Integer firstPointY = MouseInfo.getPointerInfo().getLocation().y;
Integer afterPointX;
Integer afterPointY;
while (true) {
Thread.sleep(10000);
afterPointX = MouseInfo.getPointerInfo().getLocation().x;
afterPointY = MouseInfo.getPointerInfo().getLocation().y;
if (firstPointX == afterPointX && firstPointY == afterPointY) {
System.out.println("Idle status");
} else {
System.out.println("(" + firstPointX + ", " + firstPointY + ")");
}
firstPointX = afterPointX;
firstPointY = afterPointY;
}
}
}
答案 0 :(得分:0)
If
正在运作,但您的状况始终为false
,因为您使用的是Integer
而不是原始int
。请注意,使用Object时,请使用.equals()
方法而不是==
进行比较。
因此:
if (firstPointX.equals(afterPointX) && firstPointY.equals(afterPointY)) {
//your code...
}
有关==
和Object.equals()
方法之间的差异,请参阅this。
正如评论中所述,您始终可以将int
用于此类目的,而不是Integer
。
有关Integer
和int
之间的差异,请参阅this。
答案 1 :(得分:0)
您正在比较两个对象的内存地址,即Integer
对象(包装类)。
if (firstPointX == afterPointX && firstPointY == afterPointY)
您要做的是比较这两个对象中的值。要做到这一点,你需要使用如下:
if (firstPointX.equals(afterPointX) && firstPointY.equals(afterPointY))
包装/覆盖类:
Exsample:
Integer - int
Double - double