Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
While循环导致JavaFX中的窗口崩溃_Java_Javafx - Fatal编程技术网

While循环导致JavaFX中的窗口崩溃

While循环导致JavaFX中的窗口崩溃,java,javafx,Java,Javafx,我正在尝试创建一个非常简单、易于使用的程序,它可以主动读取和显示鼠标的位置。我看过许多教程,这些教程创建的程序只有在鼠标位于GUI应用程序窗口内或点击按钮后才能读取鼠标位置,但我想要一个在屏幕所有区域显示鼠标位置的程序。这就是我所拥有的: import java.awt.MouseInfo; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandle

我正在尝试创建一个非常简单、易于使用的程序,它可以主动读取和显示鼠标的位置。我看过许多教程,这些教程创建的程序只有在鼠标位于GUI应用程序窗口内或点击按钮后才能读取鼠标位置,但我想要一个在屏幕所有区域显示鼠标位置的程序。这就是我所拥有的:

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
。对。我删除了类型。谢谢