在JavaFXWebView中打开html页面时线程睡眠不起作用

在JavaFXWebView中打开html页面时线程睡眠不起作用,java,swing,javafx,sleep,Java,Swing,Javafx,Sleep,我在javafxwebview中打开了一个关于事件的html页面,还对同一个方法进行了递归调用,该方法还关闭了另一个页面上打开的Webview。在每次递归调用中,我都会留出10秒的间隔 private static void checkForAPIStatus(String[] args) { System.out.println("checkForAPIStatus method started...."); if (RandomString

我在javafxwebview中打开了一个关于事件的html页面,还对同一个方法进行了递归调用,该方法还关闭了另一个页面上打开的Webview。在每次递归调用中,我都会留出10秒的间隔

private static void checkForAPIStatus(String[] args) {
        System.out.println("checkForAPIStatus method started....");
        if (RandomStringFromArray().equals("Unsatisfactory")) {
            if (jframe == false) {
                if (checkForTransactionStatus().equals("END TICKET ")) {
                    BringUpFrame.showBanner(args);
                    jframe = true;
                }
            }
        } else {
            if (jframe == true) {
                 BringUpFrame.disposeBanner();
            }
            jframe = false;

        }
        System.out.println(jframe);
        try {
            System.out.println("Before sleep");
            Thread.sleep(TimeInterval);
            System.out.println("After sleep");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        checkForAPIStatus(args);

    }

public static String RandomStringFromArray() {
    String[] arr = {"Unsatisfactory", "Ok"};
    Random r = new Random();
    int randomNumber = r.nextInt(arr.length);
    System.out.println(arr[randomNumber]);
    return arr[randomNumber];
}
我在这里面临的问题是,最初当jframe为false且代码通过else块时,它成功地执行睡眠调用并执行递归调用,但当showBanner方法在调用下面代码的if条件内执行时。之后,我的
线程。睡眠
调用不会返回,应用程序在那里被阻塞

public class BringUpFrame extends Application{

    static Logger logger = LoggerFactory.getLogger(BringUpFrame.class);
    private static Stage stage;

    @Override
    public void start(Stage primaryStage) throws Exception {
        int width = 0;
        int height = 0;
        String ScrnResol = getScreenResolution();
        String[] ScreenResolution = ScrnResol.split(",");

        try {
            width = Integer.parseInt(ScreenResolution[0]);
            height = Integer.parseInt(ScreenResolution[1]);

        } catch (NumberFormatException nfe) {
            logger.info("NumberFormatException: " + nfe.getMessage());
        }
        WebView webView = new WebView();
        WebEngine webEngine = webView.getEngine();
        URL resource = getClass().getClassLoader().getResource("test.htm");
        System.out.println("Resource before load "+resource);
        webEngine.load( resource.toString() );
        Scene scene = new Scene(webView,width,height);
        primaryStage.setScene(scene);
        primaryStage.setAlwaysOnTop(true);
        primaryStage.setFullScreen(true);
        primaryStage.setFullScreenExitHint("");
        primaryStage.show();
        stage = primaryStage;
    }


    public static void showBanner(String[] args) throws IOException {
        launch(args);
    }

    public static void disposeBanner() {
        stage.close();
    }

    public static String getScreenResolution() {

        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        int width = gd.getDisplayMode().getWidth();
        int height = gd.getDisplayMode().getHeight();

        String resolution = width + "," + height;
        logger.info("Till Resolution is (width,height) : " + resolution);
        return resolution;

    }
}
有人能指出上面的代码有什么错误吗


谢谢,

这能回答您的问题吗@Andreas我想暂停主线程而不是javafx窗口。真的吗?很抱歉,但我看不到问题中的任何地方显示了哪个线程正在调用
checkForAPIStatus()
方法。--此外,主线程是JavaFX事件调度线程,所以我不确定您的观点是什么。CheckApiStatus是从main方法调用的。你是对的,主线程是JavaFX事件调度线程,它调用BringupFrame JavaFX元素。在主线程继续运行并休眠10秒后,重复调用checkForApiStatus。我的问题是一旦触发javaFxElement,主线程就不会继续运行。如果你看到代码的话,我就把睡眠放在主线程上。你100%必须混合框架吗?除非这是100%必要的,否则你可能不应该这么做。这样做会使应用程序更加复杂。另外,您的代码结构和
静态
的使用说明您没有真正理解
JavaFX
的基本细节。我建议避免使用static,并做一些教程,以便更好地理解
JavaFX
框架。