在JavaFXWebView中打开html页面时线程睡眠不起作用
我在javafxwebview中打开了一个关于事件的html页面,还对同一个方法进行了递归调用,该方法还关闭了另一个页面上打开的Webview。在每次递归调用中,我都会留出10秒的间隔在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
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
框架。