MouseInfo.getPointerInfo()无法与Spring一起使用

时间:2018-10-12 13:44:46

标签: java spring spring-boot

我有一个使用spring-boot框架运行Java应用程序的麻烦。

它可以在没有框架的情况下正常工作。

这是我用来检测鼠标移动的代码。

package com.ericsson.mj.handlers;

import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;

public class MouseHandler {

    private double mousePosX;
    private double mousePosY;

    public boolean detectMouseMovement() {
        try {
            PointerInfo a = MouseInfo.getPointerInfo();
            Point b = a.getLocation();
            boolean mouseMoved = false;
            double x = b.getX();
            double y = b.getY();

            if (x != mousePosX || b.getY() != mousePosY) {
                updateMousePosition(x, y);
                mouseMoved = true;
            }
            return mouseMoved;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }

    private void updateMousePosition(double x, double y) {
        mousePosX = x;
        mousePosY = y;
    }
}

一切正常。但是有时候我会在Spring-Boot框架中运行应用程序:

PointerInfo a = MouseInfo.getPointerInfo();

失败。

  

在java.awt.MouseInfo.getPointerInfo(未知来源)

是我遇到的问题。

这是为什么?有可能修复,解决吗?我可以在没有spring-boot的情况下工作,但是我想学习它的工作原理,所以才尝试使用它。

2 个答案:

答案 0 :(得分:2)

SpringBoot默认情况下会无头运行,这可能会导致这种情况。

请参见此处Why does Swing think it's headless under Spring Boot, but not under Spring or plain Java?

进行修复

发生的事情是,SpringBoot在启动时将java.awt.headless设置为true。您可以将-Djava.awt.headless=false传递给start参数来禁用它。

答案 1 :(得分:1)

已解决

通过添加:

SpringApplicationBuilder builder = new SpringApplicationBuilder(App.class);
builder.headless(false).run(args);

应用程序没有运行,并且可以通过spring-boot运行。