N
O
D
E
M
E
D
I
A
Thinking
首页
产品
文档
博客
订单
文档
在javafx中集成
2026年 5月 20日 下午3:55
## 简介 javafx中,使用jna调用dll,利用java主窗口的hwnd创建播放视图。 x,y,w,h 为相对于java主窗口的相对位置。 ## 1 pom.xml中添加依赖 ``` <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna-platform</artifactId> <version>5.9.0</version> </dependency> ``` ## 2.创建类 cn.nodemedia.nodeplayer ``` package cn.nodemedia.nodeplayer; import com.sun.jna.Callback; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.win32.StdCallLibrary; public interface NodePlayer extends StdCallLibrary { NodePlayer INSTANCE = Native.load("libNodeMediaClient.dll", NodePlayer.class); interface onEventCallback extends Callback { void invoke(Pointer userdata, int code, String message); } long NodePlayer_new(String domain, String license); void NodePlayer_free(long ctx); void NodePlayer_setEventCallback(long ctx, onEventCallback callback, Pointer userdata); void NodePlayer_setLogLevel(long ctx, int logLevel); void NodePlayer_setAudioEnable(long ctx, boolean enable); void NodePlayer_setVideoEnable(long ctx, boolean enable); void NodePlayer_setScaleMode(long ctx, int scaleMode); void NodePlayer_setBufferTime(long ctx, int bufferTime); void NodePlayer_setHwaccelEnable(long ctx, boolean enable); void NodePlayer_setCryptoKey(long ctx, String cryptoKey); void NodePlayer_setVolume(long ctx, float volume); int NodePlayer_attachView(long ctx, Pointer hwnd); int NodePlayer_attachViewEx(long ctx, Pointer hwnd, int x, int y, int w,int h); int NodePlayer_detachView(long ctx); int NodePlayer_start(long ctx, String url); int NodePlayer_stop(long ctx); int NodePlayer_getVersion(long ctx); } ``` ## 3.在项目中使用 ``` package cn.nodemedia.nodeplayer; import com.sun.jna.platform.win32.User32; import com.sun.jna.platform.win32.WinDef; import javafx.application.Application; import javafx.application.Platform; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.stage.Stage; import javafx.stage.WindowEvent; public class HelloApplication extends Application { private static final String STAGE_TITLE = "NodePlayer java demo"; private long ctx = 0; private boolean start = false; private final NodePlayer np = NodePlayer.INSTANCE; private String domain = ""; private String license = ""; @Override public void start(Stage primaryStage) { primaryStage.setTitle(STAGE_TITLE); primaryStage.show(); //Creating a GridPane container GridPane grid = new GridPane(); grid.setPadding(new Insets(10, 10, 10, 10)); grid.setVgap(5); grid.setHgap(5); //Defining the url text field TextField url = new TextField(); url.setText("rtmp://192.168.0.2/live/bbb"); url.setPromptText("Enter a live streaming url."); url.setPrefColumnCount(50); GridPane.setConstraints(url, 0, 0); grid.getChildren().add(url); //Defining the start button Button submit = new Button("Start"); GridPane.setConstraints(submit, 1, 0); grid.getChildren().add(submit); submit.setOnAction(event -> { if (start) { np.NodePlayer_stop(ctx); submit.setText("Start"); } else { np.NodePlayer_start(ctx, url.getText()); submit.setText("Stop"); } start = !start; }); WinDef.HWND hwnd = User32.INSTANCE.FindWindow(null, STAGE_TITLE); ctx = np.NodePlayer_new(domain, license); np.NodePlayer_setScaleMode(ctx, 1); np.NodePlayer_attachViewEx(ctx, hwnd.getPointer(), 10, 40, 780, 550); np.NodePlayer_setHwaccelEnable(ctx, true); np.NodePlayer_setEventCallback(ctx, (userdata, code, message) -> { System.out.printf("on EventCallback code=%d message=%s\n", code, message); }, null); primaryStage.setScene(new Scene(grid, 800, 600)); primaryStage.setOnCloseRequest(new EventHandler<>() { @Override public void handle(WindowEvent windowEvent) { Platform.exit(); System.exit(0); } }); } @Override public void stop() throws Exception { super.stop(); np.NodePlayer_free(ctx); } public static void main(String[] args) { launch(); } } ``` ## 准备dll 将开发包中的 libNodeMediaClient.dll 放在项目根目录下 ## 运行效果 
嘿,我是小R,需要帮助随时找我哦
QQ客服:281269007
邮件支持
扫码加微信
回到顶部