1

マウスカーソルの位置を追跡しようとしているため、追跡を続行するにはスレッドを使用する必要があります。私のスレッドは一度だけ実行されています。途中で何かが足りなかったと思います。

コード :

mousePositionクラス

import java.awt.MouseInfo;
import java.awt.Point;
import java.util.Timer;

public class mousePosition implements Runnable
{
    static Point mouseLocation = MouseInfo.getPointerInfo().getLocation();
    static Timer t = new Timer();
    int x,y = 0;


    public void run()
    {
        try
        {
                x = mouseLocation.x;
                y = mouseLocation.y;

                System.out.println("X:"+x+" Y:"+y+" at time "+System.currentTimeMillis());
        }

        catch(Exception e)
        {
            System.out.println("Exception caught : "+e);
        }

    }



}

メインクラス

public class threadRunner
{
    public static void main(String[] args)
    {
        Thread t1 = new Thread(new mousePosition());

        t1.start();

    }

}

助けてくれてありがとう。私はこの質問が以前に尋ねられたことを知っていますが、私はまだそれを機能させるのに苦労しています。

4

5 に答える 5

6

スレッドのrun()メソッドは1回だけ実行されます。次のようなことをすると、さらに実行されます。

public void run() {
  while(true) { // Or with a stop condition
    try {
            x = mouseLocation.x;
            y = mouseLocation.y;

            System.out.println("X:"+x+" Y:"+y+" at time "+System.currentTimeMillis());

    } catch(Exception e) {
        System.out.println("Exception caught : "+e);
    }
  }
}

スレッドでのwhileループは高価であると確信していますが、計算コストで言えば、オブザーバーデザインパターンを使用する方が良い方法があります。このグッドプラクティスの実装と例は、まさにMouseListenerです。

于 2012-07-20T11:54:08.713 に答える
2

start()新しい場合Thread、発生するのはThreadsrun()メソッドが実行されることだけです。run()メソッドが終了すると、死にThreadます。

マウスの位置を継続的に確認するには、代わりに何らかの方法で開始する必要があります。ここMouseListenerに優れたチュートリアルがあります。

スレッドの詳細については、このテーマに関するJavaチュートリアルを参照することをお勧めします。

于 2012-07-20T11:43:32.180 に答える
2

これが50msごとにマウスの位置を読み取る簡単な方法です

class mousePosition {
    public static void main(String[] args) {
        Timer t = new Timer();
        t.schedule(new TimerTask() {
            public void run() {
                int x, y;
                try {
                    PointerInfo mouseLocation = MouseInfo.getPointerInfo();
                    x = mouseLocation.getLocation().x;
                    y = mouseLocation.getLocation().y;
                    System.out.println("X:" + x + " Y:" + y + " at time "
                            + System.currentTimeMillis());
                } catch (Exception e) {
                    System.out.println("Exception caught : " + e);
                }
            }
        }, 0, 50);
    }
}
于 2012-07-20T11:53:28.743 に答える
0

これを行う :

public void run()
    {
        try
        {       
                boolean mouseTracked = false;
                while(!mouseTracked){
                   x = mouseLocation.x;
                   y = mouseLocation.y;

                System.out.println("X:"+x+" Y:"+y+" at time "+System.currentTimeMillis());
                mouseTracked = true; //do this when mouse tracked..
        }
}
        catch(Exception e)
        {
            System.out.println("Exception caught : "+e);
        }

    }

これは、mouseTrackedをtrueに設定し、mouseTrackedをtrueに設定して一致条件で実行するまで、マウスを追跡し続けます。

于 2012-07-20T11:47:50.997 に答える
0

このようにクラスを変更します

import java.awt.MouseInfo;
import java.awt.Point;
import java.util.Timer;

public class MousePosition implements Runnable
{
static Point mouseLocation = null;
static Timer t = new Timer();
int x,y = 0;


public void run()
{   
  while(true){
    try
    {
          mouseLocation= MouseInfo.getPointerInfo().getLocation();

            x = mouseLocation.x;
            y = mouseLocation.y;

            System.out.println("X:"+x+" Y:"+y+" at time "+System.currentTimeMillis());
    }

    catch(Exception e)
    {
        System.out.println("Exception caught : "+e);
    }
  }
}
}
于 2012-07-20T11:49:31.197 に答える