While循环导致JavaFX中的窗口崩溃
我正在尝试创建一个非常简单、易于使用的程序,它可以主动读取和显示鼠标的位置。我看过许多教程,这些教程创建的程序只有在鼠标位于GUI应用程序窗口内或点击按钮后才能读取鼠标位置,但我想要一个在屏幕所有区域显示鼠标位置的程序。这就是我所拥有的:While循环导致JavaFX中的窗口崩溃,java,javafx,Java,Javafx,我正在尝试创建一个非常简单、易于使用的程序,它可以主动读取和显示鼠标的位置。我看过许多教程,这些教程创建的程序只有在鼠标位于GUI应用程序窗口内或点击按钮后才能读取鼠标位置,但我想要一个在屏幕所有区域显示鼠标位置的程序。这就是我所拥有的: import java.awt.MouseInfo; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandle
import java.awt.MouseInfo;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class MouseCoordinates extends Application{
public static void main(String[] args) {
launch();
}
public void start(Stage primaryStage) throws Exception{
primaryStage.setTitle("Mouse Reader");
Label x = new Label();
Label y = new Label();
StackPane layout = new StackPane();
layout.getChildren().addAll(x, y);
Scene scene = new Scene(layout, 600, 500);
primaryStage.setScene(scene);
primaryStage.show ();
double mouseX = 1.0;
double mouseY = 1.0;
while(true){
mouseX = MouseInfo.getPointerInfo().getLocation().getX();
mouseY = MouseInfo.getPointerInfo().getLocation().getY();
x.setText("" + mouseX);
y.setText("" + mouseY);
}
}
}
我知道这个while循环是导致窗户破裂的原因,但我想不出解决办法。有人能解释为什么我不能在JavaFX中使用while循环,以及解决这个问题的方法吗?您的start()
方法没有任何更改以退出循环,从而返回您定义的无限循环:while(true){…}
而没有return
语句
为什么不使用a?解决您的需求的另一种方法是在
StackPane
对象上使用addEventFilter(MouseEvent.MOUSE_MOVED)
:
layout.addEventFilter(MouseEvent.MOUSE_MOVED, e -> {
x.setText("" + e.getScreenX());
y.setText("" + e.getScreenY());
});
MouseEvent
类提供设备上的X和Y绝对位置以及
在源组件上:
返回事件的绝对水平位置
getScreenY()
返回事件的绝对垂直y位置
getX();
事件相对于事件原点的水平位置
MouseEvent的来源
getY();
事件相对于事件原点的垂直位置
MouseEvent的来源
getY();
您的start()
方法没有任何更改,无法退出循环,因此无法按照您定义的无限循环返回:while(true){…}
而不使用return
语句
为什么不使用a?解决您的需求的另一种方法是在
StackPane
对象上使用addEventFilter(MouseEvent.MOUSE_MOVED)
:
layout.addEventFilter(MouseEvent.MOUSE_MOVED, e -> {
x.setText("" + e.getScreenX());
y.setText("" + e.getScreenY());
});
MouseEvent
类提供设备上的X和Y绝对位置以及
在源组件上:
返回事件的绝对水平位置
getScreenY()
返回事件的绝对垂直y位置
getX();
事件相对于事件原点的水平位置
MouseEvent的来源
getY();
事件相对于事件原点的垂直位置
MouseEvent的来源
getY();
注意
getX()
和getY()
的返回类型是double
,而不是int
。对。我删除了类型。谢谢。注意getX()
和getY()
的返回类型是double
,而不是int
。对。我删除了类型。谢谢