JavaFX项目无法使用ScreenRecorder类的问题求助
解决JavaFX录屏应用中无法导入ScreenRecorder类的问题
核心问题分析
你遇到的问题集中在三点:
- 错误的包路径:Monte Screen Recorder的
ScreenRecorder类实际位于org.monte.screenrecorder包下,而非你代码中写的com.github.stephenc.monte - 模块化项目未声明依赖:Java模块化项目需要在
module-info.java中显式声明对Monte库的依赖 - 构造方法参数不匹配:Monte的
ScreenRecorder构造方法参数与你代码中的写法不符
具体修改步骤
1. 清理Maven依赖(可选但推荐)
你的pom.xml中同时引入了两个录屏库,可能引发依赖冲突。建议保留monte-screen-recorder并移除另一个,确保依赖环境纯净:
<!-- 移除冲突的依赖 --> <!-- <dependency> <groupId>com.github.agomezmoron</groupId> <artifactId>screen-recorder</artifactId> <version>0.0.3</version> </dependency> -->
2. 更新module-info.java
在模块化项目中,必须声明对Monte库的依赖,添加以下配置:
module com.example.videorecorder { requires javafx.controls; requires javafx.fxml; requires java.desktop; // 新增:声明依赖Monte录屏库 requires monte.screenrecorder; opens com.example.videorecorder to javafx.fxml; exports com.example.videorecorder; }
3. 修正代码中的导入与实例逻辑
修改导入路径,并调整ScreenRecorder的实例化代码以匹配官方API规范:
import javafx.application.Application; import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.stage.Screen; // 修正导入路径 import org.monte.media.Format; import org.monte.media.Registry; import org.monte.screenrecorder.ScreenRecorder; import java.awt.*; import java.io.File; import java.io.IOException; public class ScreenRecorderApp extends Application { private ScreenRecorder screenRecorder; @Override public void start(Stage primaryStage) { Button startButton = new Button("Start Recording"); Button stopButton = new Button("Stop Recording"); startButton.setOnAction(event -> startRecording()); stopButton.setOnAction(event -> stopRecording()); VBox root = new VBox(10, startButton, stopButton); Scene scene = new Scene(root, 300, 200); primaryStage.setScene(scene); primaryStage.setTitle("Screen Recorder"); primaryStage.show(); } private void startRecording() { try { // 转换JavaFX Screen为AWT Rectangle(Monte依赖AWT组件) Rectangle captureArea = new Rectangle( (int) Screen.getPrimary().getBounds().getWidth(), (int) Screen.getPrimary().getBounds().getHeight() ); // 设置视频输出格式 Format videoFormat = Registry.getInstance().getFormat( org.monte.media.FormatKeys.MediaTypeKey, org.monte.media.FormatKeys.MediaType.VIDEO, org.monte.media.FormatKeys.EncodingKey, "AVI" ); // 初始化ScreenRecorder screenRecorder = new ScreenRecorder( GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(), captureArea, videoFormat, null, // 不需要音频可设为null null, null, new File(System.getProperty("user.home") + "/Downloads/") ); screenRecorder.start(); } catch (IOException | AWTException e) { e.printStackTrace(); } } private void stopRecording() { if (screenRecorder != null) { try { screenRecorder.stop(); screenRecorder = null; } catch (IOException e) { e.printStackTrace(); } } } @Override public void stop() { stopRecording(); Platform.exit(); } public static void main(String[] args) { launch(args); } }
4. 验证依赖与项目
执行mvn clean install确保依赖正确下载,在IDE中刷新Maven项目,此时应该能正常导入并使用ScreenRecorder类。
内容的提问来源于stack exchange,提问作者Anup Panchal
相关产品推荐
相关产品推荐

