2017-06-04 3 views
0

"アイドル"ステータスを検出するプログラムを作成しようとしていますが、私のコードでは問題は見られません。誰かが役に立つヒントで私を助けてくれますか?ここに私のコードです:ステートメントが機能しない場合、プログラムは直接 "else"ステートメントを入力します

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; 

     } 

    } 
} 
+3

または 'int'ない' Integer'を使用しています。 –

+0

まあええ...それは解決しました、ありがとうございました! –

答えて

0

Ifが機能していますが、あなたの代わりにプリミティブintIntegerを使用しているので、あなたの状態は常に、falseを得ています。 Objectを使用する場合は、の代わりに.equals()メソッドと比較してください。

したがって:

if (firstPointX.equals(afterPointX) && firstPointY.equals(afterPointY)) { 
    //your code... 
} 

==Object.equals()方法との間の差をthisを参照してください。

コメントに記載されているように、Integerではなく、intをいつでも使用できます。

Integerintの違いについては、thisを参照してください。

+0

==の代わりに.equalsを使うだけで十分でしたが、そのような目的のためにintも良いかもしれません。どうもありがとうございました ! :) –

+0

ちょうどそれをやった! :) –

0

オブジェクト(ラッパークラス)Integerという2つのオブジェクトのメモリアドレスを比較しています。

if (firstPointX == afterPointX && firstPointY == afterPointY) 

これら2つのオブジェクトの値を比較します。あなたは以下のように使用する必要があることを行うには:

if (firstPointX.equals(afterPointX) && firstPointY.equals(afterPointY)) 

ラッパー/クラスをカバーします:

  • を各プリミティブデータ型のラッパークラスがあります。
  • プリミティブタイプはパフォーマンス上の理由から使用されます( プログラムの方が良い)。
  • プリミティブ型を使用してオブジェクトを作成することはできません。
  • オブジェクトを作成して基本的なタイプ(つまり、 のタイプを変換する)を操作できます。

Exsample:

Integer - int 
Double - double 
関連する問題