2016-08-21 27 views
1

私は最近、Leap Motionのコーディングを開始しました。私はdevに適用したときに何年か前に得たキットです。それがベータ段階に入ったときの会社のために。当時、私の家族が所有していたラップトップは、(何とか)Leap Motionのソフトウェアやドライバ、または私が書き込んだコードを実行することができませんでした。最近、私は学校から "新しい"ラップトップを手に入れ、それをコード化しようとしました。そして、ビオラ、それは動作します!まあ、ほとんど。私は、私の指がLeap Motionの上にあるところに基づいてマウスを画面の周りに動かすための小さなプログラムを書こうとしていましたが、ちょっとした問題があるようです。 Eclipseはエラーを表示していませんが、プログラムを実行すると、マウスを動かす行は機能しません。JavaのmouseMove()に関する問題

場合によっては問題と関連する場合がありますが、私は東芝Portege M780でWindows 10を実行しています。ここで

がコードです。この後

import com.leapmotion.leap.*; 
import java.awt.Dimension; 
import java.awt.Robot; 

class CustomListener extends Listener { 

    public Robot robot; 

    public void onConnect(Controller c) { 
     System.out.println("Connected."); 
    } 

    public void onFrame(Controller c) { 
     //System.out.println("Frame Available."); 
     Frame frame = c.frame(); 
     InteractionBox box = frame.interactionBox(); 
     for(Finger f : frame.fingers()) { 
      if(f.type() == Finger.Type.TYPE_INDEX) { 
       //Vector fingerpos = f.tipPosition(); 
       Vector boxFingerPos = box.normalizePoint(f.tipPosition()); 
       Dimension screen = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 
       //robot.mouseMove(Math.round(screen.width * boxFingerPos.getX()), Math.round(screen.height - boxFingerPos.getY() * screen.height)); 
       int x = Math.round(boxFingerPos.getX()* screen.width); 
       int y = Math.round(screen.height - screen.height * boxFingerPos.getY()); 
       //robot.mouseMove(x, y); 
       System.out.println("Fingers: " + frame.fingers().count() + ", X: " + x + ", Y: " + y); 
       robot.mouseMove(x, y); 
      } 
     }  
    } 
} 

public class LeapMouse { 
    public static void main(String[] args) { 
     CustomListener l = new CustomListener(); 
     Controller c = new Controller(); 
     c.addListener(l); 
     System.out.println("Press enter to quit."); 
     c.setPolicy(Controller.PolicyFlag.POLICY_BACKGROUND_FRAMES); 
     c.setPolicy(Controller.PolicyFlag.POLICY_IMAGES); 
     c.setPolicy(Controller.PolicyFlag.POLICY_OPTIMIZE_HMD); 
     try { 
      System.in.read(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     c.removeListener(l); 
    } 
} 

、私は自分のコードライブラリを使用してコードをコンパイルするリープモーションのウェブサイト上の指示に従い、管理者のコマンドプロンプト上でプログラムを実行したが、それは移動しないだろう何らかの理由でマウスを操作したり、どんな助けもありがとうございます。

ありがとうございました!

答えて

0

まあ、私は自分のミスがどこにあるのか把握することができました。私はロボットオブジェクトを作成したメソッドを削除し、それをonFrame()メソッドに移動してtry/catchステートメントに入れなければなりませんでした。

import com.leapmotion.leap.*; 
import java.awt.Dimension; 
import java.awt.Robot; 

class CustomListener extends Listener { 

    public void onConnect(Controller c) { 
     System.out.println("Connected."); 
    } 

    public void onFrame(Controller c) { 
     Frame frame = c.frame(); 
     InteractionBox box = frame.interactionBox(); 
     for(Finger f : frame.fingers()) { 
      if(f.type() == Finger.Type.TYPE_INDEX) { 
       Vector boxFingerPos = box.normalizePoint(f.tipPosition()); 
       Dimension screen = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 
       int x = Math.round(boxFingerPos.getX()* screen.width); 
       int y = Math.round(screen.height - screen.height * boxFingerPos.getY()); 
       try { 
        Robot robot = new Robot(); 
        robot.mouseMove(x, y); 
       } catch (AWTException z) { 
        z.printStackTrace(); 
       } 
      } 
     }  
    } 
} 

public class LeapMouse { 
    public static void main(String[] args) { 
     CustomListener l = new CustomListener(); 
     Controller c = new Controller(); 
     c.addListener(l); 
     System.out.println("Press enter to quit."); 
     c.setPolicy(Controller.PolicyFlag.POLICY_BACKGROUND_FRAMES); 
     c.setPolicy(Controller.PolicyFlag.POLICY_IMAGES); 
     c.setPolicy(Controller.PolicyFlag.POLICY_OPTIMIZE_HMD); 
     try { 
      System.in.read(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     c.removeListener(l); 
    } 
} 
関連する問題