Java 摆动时的跳跃运动问题?

Java 摆动时的跳跃运动问题?,java,swing,leap-motion,Java,Swing,Leap Motion,我开始玩弄Leap运动控制器,并在Swing中制作了一个小GUI。这意味着它只是一个带有标签的框架,应该显示跳跃运动所看到的文本。不幸的是,我的程序在两秒钟后就崩溃了。我没有例外或类似的情况。这是我的密码: public class GUI extends JFrame{ private static final long serialVersionUID = 6411499808530678723L; public JLabel label; public GUI(){ this.


我开始玩弄Leap运动控制器,并在Swing中制作了一个小GUI。这意味着它只是一个带有标签的框架,应该显示跳跃运动所看到的文本。不幸的是,我的程序在两秒钟后就崩溃了。我没有例外或类似的情况。这是我的密码:

public class GUI extends JFrame{
private static final long serialVersionUID = 6411499808530678723L;

public JLabel label;

public GUI(){
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(300, 200);
    this.label = new JLabel("Waiting for Gestures");
    this.add(label);

    setVisible(true);
}

public class LeapListener extends Listener{
    JLabel label;

    LeapListener(JLabel label){
        this.label = label;
    }

    @Override
    public void onInit(Controller controller){

    }

    @Override
    public void onExit(Controller controller){

    }

    @Override
    public void onConnect(Controller controller){
        System.out.println("bin da");
        controller.enableGesture(Gesture.Type.TYPE_CIRCLE);
        controller.enableGesture(Gesture.Type.TYPE_KEY_TAP);
        controller.enableGesture(Gesture.Type.TYPE_SCREEN_TAP);
        controller.enableGesture(Gesture.Type.TYPE_SWIPE);
    }

    @Override
    public void onDisconnect(Controller controller){

    }

    @Override
    public void onFrame(Controller controller){
        Frame frame = controller.frame();

        GestureList glist = frame.gestures();

        for (int i = 0; i < glist.count(); i++){
            Gesture g = glist.get(i);

            switch (g.type()){
            case TYPE_CIRCLE:
                CircleGesture circle = new CircleGesture(g);
                this.label.setText("Mach mal nen Kreis!");
            case TYPE_KEY_TAP:
                KeyTapGesture key = new KeyTapGesture(g);
                this.label.setText("Schreiben?");
            case TYPE_SCREEN_TAP:
                ScreenTapGesture screen = new ScreenTapGesture(g);
                this.label.setText("Klicken?");
            case TYPE_SWIPE:
                SwipeGesture swipe = new SwipeGesture(g);
                this.label.setText("Da wurde gewischt!");
            default:
                System.out.println("nothing!");
            break;
            }
        }
    }
}

public static void main(String[] args) {
    GUI gui = new GUI();
    LeapListener listener;
    listener = gui.new LeapListener(gui.label);
    Controller controller = new Controller();
    controller.addListener(listener);

}
公共类GUI扩展JFrame{
私有静态最终长serialVersionUID=6411499808530678723L;
公共标签;
公共图形用户界面(){
此.setDefaultCloseOperation(关闭时退出);
这个.设置大小(300200);
this.label=new JLabel(“等待手势”);
添加(标签);
setVisible(真);
}
公共类LeapListener扩展了Listener{
JLabel标签;
LeapListener(JLabel标签){
this.label=标签;
}
@凌驾
公共无效onInit(控制器){
}
@凌驾
public void onExit(控制器){
}
@凌驾
公用void onConnect(控制器){
系统输出打印号(“bin da”);
控制器.启用手势(手势.类型.类型\u圆圈);
控制器.启用手势(手势.类型.类型\按键\轻触);
控制器.启用手势(手势.类型.类型\屏幕\点击);
控制器.启用手势(手势.类型.类型\u滑动);
}
@凌驾
公共无效断开连接(控制器){
}
@凌驾
公共void onFrame(控制器){
Frame=controller.Frame();
GestureList glist=frame.signatures();
for(int i=0;i
}

我不知道我做错了什么。Windows错误消息表示Java平台SE二进制文件已关闭(javaw.exe)。Errormodule:Leap.dll
这是我犯的错误还是我的整个设置都被破坏了?

好的,我自己找到了解决方案,但不幸的是我无法解释。
我必须在类声明中创建控制器对象,而不是在main方法中。然后我必须在GUI的构造函数中将侦听器添加到控制器中,如下所示:

public class GUI extends JFrame{
private static final long serialVersionUID = 6411499808530678723L;

public JLabel label;
public Controller c = new Controller();
public LeapListener listener;

public GUI(){
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setSize(300, 200);
    this.label = new JLabel("Waiting for Gestures");
    this.add(label);
    listener = new LeapListener(this.label);
    c.addListener(listener);
    setVisible(true);
}
    ...
}

所以,我很高兴我能让它工作,但也许有人对这个问题感兴趣,可能会找到我出错的原因。

你在哪里添加你的
LeapListener
?“简单中断”是什么意思?LeapListener添加在最后一行(controller.addListener(listener);)中的“简单中断”是指我没有得到任何java异常。程序只是因为Windows错误而崩溃。一旦main()函数退出,任何局部变量,包括第一个版本中的控制器对象,都会超出范围,并有资格进行垃圾收集。好的,我想我现在明白了。非常感谢。