JavaFX 可以调用和嵌入 OCX 组件吗
Posted
技术标签:
【中文标题】JavaFX 可以调用和嵌入 OCX 组件吗【英文标题】:Can JavaFX call and embedd OCX Components 【发布时间】:2012-05-15 14:55:13 【问题描述】:JavaFX 是否能够加载和嵌入 OCX 控件?我想在我的应用程序中使用 Internet Explorer,因为 WebKit 浏览器不支持 ActiveX。而且由于我必须依赖第三方 ActiveX 控件(我知道它们是邪恶的),所以我必须使用 IE。
这个问题与“我可以在 Java 中使用 OCX”不完全相关,因为我想要一些我想要使用的 JavaFX 组件。
或者我必须依赖这里发布的库:
Use a .OCX Control in Java
提前致谢,
斯文
【问题讨论】:
【参考方案1】:您必须依赖您在问题中提供的链接中发布的库。 或者您需要编写自己的 JNI 接口。
如果您确实访问 OCX 组件,您可能需要将它们放在自己的窗口中,而不是共享由 JavaFX 阶段创建的窗口,因为您可能会遇到 JavaFX 渲染器在 OCX 所在的窗口部分写入冲突的问题组件已显示 - 您必须尝试一下,看看会发生什么才能确认。
更简单的方法可能是要求您的应用程序的用户将他们的默认浏览器设置为 IE,然后调用 JavaFX hostservices.showDocument(uri) api 来启动一个嵌入了您需要的 OCX 组件的 IE 页面。
另一种选择是:
-
将您的 JavaFX 应用程序作为小程序嵌入网页中。
还将您的 activex 控件嵌入网页中。
在网页显示时,检查浏览器,如果不是 IE,告诉他们用户必须使用 Internet Explorer。
让用户接受浏览器显示的任何其他安全警告。
让用户(或者可能是 javascript)将浏览器窗口的大小调整为全屏(参见 IE9 Full Screen Mode 或 Full Screen Browsers with JavaScript)。
使用通过来自javafx/javascript bridge 的调用调用的 javascript 在您的活动 X 控件和 java 应用程序之间进行通信,并通过页面中嵌入的 VBScript 控制您的活动 X 控件。
它可能会起作用,但它是一个丑陋的科学怪人解决方案。 . .
如果您可以将您的媒体转换为 JavaFX 支持的格式并直接通过 JavaFX 播放,那将是更可取的,或者由于深度 ActiveX 集成要求,JavaFX 并不是最好的解决您的问题,使用 Silverlight 之类的东西可能会更好。
【讨论】:
感谢您的解释。在我们摆脱 ActiveX 之前,调用 hostservices 似乎是一个很好的解决方法。问题是 JavaFX 客户端应用程序应该全屏运行,以显示各种媒体内容,其中之一应该是嵌入了 ActiveX 的 html 页面。我不知道用 IE 覆盖该应用程序、删除它的边框和控件以及在启动期间定位和调整它的任何“简单”方法。 根据 Sven 提供的其他信息更新了答案。以上是关于JavaFX 可以调用和嵌入 OCX 组件吗的主要内容,如果未能解决你的问题,请参考以下文章