,请参阅此信息。
我正在尝试编写一个检测"空闲"状态的程序,但我在代码中看不到问题。有人可以帮我一个有用的技巧吗?这是我的代码:
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;
}
}
}
If
正在工作,但是您的病情总是得到false
,因为您使用的是Integer
而不是原始int
。请注意,当您使用对象时,将它们与.equals()
方法而不是==
进行比较。
因此:
if (firstPointX.equals(afterPointX) && firstPointY.equals(afterPointY)) {
//your code...
}
有关==
和Object.equals()
方法之间的区别,请参阅此信息。
,如注释中所述,您可以始终将int
用于此目的,而不是Integer
。
Integer
和int
。
您正在比较两个对象内存地址,即Integer
对象(包装程序类(。
if (firstPointX == afterPointX && firstPointY == afterPointY)
您想做的是比较这两个对象中的值。为此,您需要像以下内容一样使用:
if (firstPointX.equals(afterPointX) && firstPointY.equals(afterPointY))
包装/覆盖类:
- 每个原始数据类型都有一个包装类。
- 原始类型是出于绩效原因而使用的(对您来说更好程序(。
- 无法使用原始类型创建对象。
- 允许一种创建对象和操纵基本类型的方法(即。转换类型(。
exsample:
Integer - int
Double - double