SWT Browser中JavaScript调用摄像头功能失效问题求助
SWT Browser摄像头调用失效问题
我在SWT Browser中打开本地网站时,页面调用摄像头的功能失效,但在Chrome浏览器中操作正常(会弹出授权提示)。以下是相关代码和依赖:
代码实现
public class SWTBrowser { private static Display display; private static Shell shell; /** * Launch */ public static final void launch() { display = new Display(); shell = new Shell(display); Rectangle clientArea = display.getClientArea(); shell.setSize(clientArea.width, clientArea.height); shell.setLocation(0, 0); GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 3; gridLayout.marginWidth = 0; gridLayout.marginHeight = 0; shell.setFullScreen(false); shell.setLayout(gridLayout); Browser browser = new Browser(shell, SWT.NONE); browser.setJavascriptEnabled(true); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; data.verticalAlignment = GridData.FILL; data.horizontalSpan = 3; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; data.widthHint = clientArea.width; data.heightHint = clientArea.height; browser.setLayoutData(data); shell.open(); browser.setUrl("http://localhost:" + Constants.SERVER_PORT + "/portal/dashboard.jsf"); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } ////////////////////// //// Getter + Setter ////////////////////// public static Display getDisplay() { return display; } public static void setDisplay(Display display) { SWTBrowser.display = display; } public static Shell getShell() { return shell; } public static void setShell(Shell shell) { SWTBrowser.shell = shell; } }
POM依赖
<dependency> <groupId>org.eclipse.platform</groupId> <artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId> <version>3.120.0</version> </dependency>
解决办法
检查系统摄像头权限
SWT Browser基于Mac的WebKit引擎,需确保应用获得系统摄像头授权:- 打开「系统偏好设置」→「安全性与隐私」→「摄像头」
- 找到你的Java应用(或打包后的程序),勾选允许访问摄像头
- 若列表无该应用,先运行一次触发权限请求,未弹出则手动添加
升级SWT版本
你当前使用的3.120.0版本较旧,后续版本优化了WebKit媒体权限处理。建议升级到最新稳定版,更新POM依赖:<dependency> <groupId>org.eclipse.platform</groupId> <artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId> <version>4.26</version> </dependency>明确指定WebKit引擎初始化Browser
替换原Browser初始化代码,显式指定WebKit引擎,确保媒体权限逻辑生效:Browser browser = new Browser(shell, SWT.WEBKIT);检查页面权限错误处理
在网页的摄像头调用代码中添加错误捕获,排查是否为权限拒绝导致:navigator.mediaDevices.getUserMedia({ video: true }) .then(stream => { /* 处理视频流 */ }) .catch(err => { console.error("摄像头访问失败:", err); // 提示用户检查系统权限 });应用签名(打包场景)
若应用打包为DMG/App文件,未签名会被系统限制权限,需完成代码签名流程,确保权限请求正常触发。
内容的提问来源于stack exchange,提问作者vished2000
相关产品推荐
相关产品推荐

