我想在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文件时,它正常工作。
谢谢考虑。
我刚刚找到了这个问题的原因。这个问题与英伟达司机有关。我当时使用的是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表单-- 我得到的异常是“应用程序启动必