我有一个使用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的情况下工作,但是我想学习它的工作原理,所以才尝试使用它。
答案 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运行。