当前位置: 首页 > 知识库问答 >
问题:

JavaFX应用程序不与Selenium WebDriver一起运行

许琛
2023-03-14

我想在JavaFX应用程序中使用Selenium WebDriver,我想获得一个网页的截图,并在JavaFX应用程序中的ImageView中显示它。

此代码完全可以拍摄网页截图并保存:

package application;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

public class Main{

    public static void main(String[] args) throws Exception {

        File file = new File("E:\\Eclipse_Projects\\phantomjs-2.1.1-windows\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
        System.setProperty("webdriver.gecko.driver","C:\\geckodriver-v0.14.0-win64\\geckodriver.exe");
        System.setProperty("phantomjs.binary.path", file.getAbsolutePath());

        WebDriver driver = new PhantomJSDriver();
        driver.get("http://google.com");

        // taking screenshot
        File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screenshot, new File("screenshot.png"));

        driver.close();

        System.out.println("Done!");    
    }
}

为了在JavaFX应用程序中使用保存的屏幕截图,我试图对这个类进行一些简单的修改,使其成为一个JavaFX应用程序。

以下是修改后的代码:

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application{

    public static void main(String[] args) throws Exception {

        File file = new File("E:\\Eclipse_Projects\\phantomjs-2.1.1-windows\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
        System.setProperty("webdriver.gecko.driver","C:\\geckodriver-v0.14.0-win64\\geckodriver.exe");
        System.setProperty("phantomjs.binary.path", file.getAbsolutePath());

        WebDriver driver = new PhantomJSDriver();
        driver.get("http://google.com");

        // taking screenshot
        File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screenshot, new File("screenshot.png"));

        driver.close();

        System.out.println("Done!");

        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        primaryStage.show();
    }
}

这是一个最简单的JavaFX应用程序,在main方法中有一些代码,当我运行它时,它应该保存屏幕截图并打开一个空白的JavaFX应用程序。但是当我运行它时,它什么也不做,甚至不执行main方法。它会在1-2秒后终止,而不做任何操作。

然后我意识到JavaFX应用程序不运行时,Selenium Web驱动程序库是在构建路径。即使我从类中删除所有Selenium内容,它最终也会出现同样的问题。

package application;

import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application{

    public static void main(String[] args) throws Exception {

        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        primaryStage.show();
    }
}

上面的代码仅在我从项目的构建路径中删除Selenium WebDriver库时运行。

我曾在两个IDE中尝试过这些方法:在Eclipse中,程序在1-2秒后终止,没有做任何事情,也没有任何错误。在NetBeans中,程序会在1-2秒后终止,但不会执行任何操作,但它会给我一个错误:

C:\Users\User\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: -1073740791
BUILD FAILED (total time: 2 seconds)

Java写代码快2年了,但遇到这样的问题还是第一次。我谷歌了很多,没有找到类似的东西。

有人知道这里发生了什么吗?问题是什么?任何想法都将不胜感激。

编辑:当我在IDE之外运行生成的jar文件时,它正常工作。

谢谢考虑。

共有1个答案

郎德馨
2023-03-14

我刚刚找到了这个问题的原因。这个问题与英伟达司机有关。我当时使用的是378.49版本,后来又回到了376.33版本。现在,问题解决了。您可以查看有关的更多详细信息https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000060510-Process-finished-with-exit-code-1073740791-0xC0000409-JavaFX-Application

感谢@KrishnanMahadevan提醒我使用IntelliJ IDE。

 类似资料:
  • 例如。 这应该运行一个简单的hello world应用程序,摘自oracle文档。然而,当我‘运行’这个代码,没有窗口打开。取而代之的是打开一个名为“Java”的应用程序。看起来'java'只是一个位于'jdk1.8.0_25.jdk/contents/home/bin'中的'UNIX可执行文件‘。应用程序'java'绝对不显示任何东西,并且在没有强制退出的情况下无法关闭。 我在MacBook上运

  • 版本 openjdk版本“11.0.11”2021-04-20 如果可能的话,请不要告诉我像我以前看到其他人回答的那样“阅读基础知识”。我只是不确定为什么我的代码不能在我的最后一个项目中运行。 提前谢谢你!

  • 作为一个软件开发人员,我需要做哪些步骤来允许我的JavaFX应用程序与JDK11+一起运行?有什么好的广告吗?是否可以通过Gradle获得OpenJDK?

  • 我创建了一个依赖于OpenJDK 11和JavaFX的HelloWorldJava小应用程序。该应用程序打包在jar文件中,只有在我的系统上单独安装Java11和JavaFX时才能运行。 现在,我想将我的jar转换成一个自包含的Java应用程序,其中包括JavaFX和一个功能齐全的Java运行时环境。这将允许我在不安装OpenJDK 11的情况下运行我的应用程序(这会带来技术障碍,例如正确设置路径

  • 我正在开发一个java应用程序,其中我使用java swing窗体和javafx FXML stage,我对javafx是新手,现在我在应用程序中调用具有控制器的javafx FXML stage,从swing窗体调用FXML stage,单击如下按钮----application.launch(myfxml.class); 下面的代码片段用于调用swing表单-- 我得到的异常是“应用程序启动必