You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:25:56