在c ++程序中执行jar文件

时间:2011-11-05 06:48:50

标签: java c++ qt opengl cad

我正在开发一个CAD软件,其中我的图形部分我正在使用 opnegl & 内核正在 c ++ 中开发。 对于窗口界面我被建议使用 QT ,但由于我的软件用于商业,我不想使用QT,而是使用 Java 。 我的问题是,我可以在我的c ++程序中使用jar exe(因为我的内核是在C ++中,内核控制程序)? 如果是,任何人都可以提供一些简单的例子或一些网站。 如果没有其他选择是什么?

我要求windows界面主要是让用户选择他想要执行的操作(创建点,线,圆等),提供一些小的图标,用户可以点击的。 我还要求弹出窗口的Windows界面显示警告错误输入参数

4 个答案:

答案 0 :(得分:2)

如果你在没有修改的情况下使用他们的dll,你甚至可以在商业项目中使用Qt。

但您也可以使用JNI(Java本机接口)将Java与c ++接口。或者您可以使用类似swig的内容。 Swig从c ++ clases生成java类。它简化了两种语言接口的工作。

您可能需要使用Java启动应用程序,这可能是必要的,与您想要的不同。然后,Java通过dll加载c ++内核,然后调用函数。

答案 1 :(得分:1)

您可以将Java虚拟机直接嵌入到C ++程序中。 JVM提供了一个API,允许在与本机程序相同的进程空间中实例化VM。

但是,不是将JVM嵌入到本机应用程序中,我认为反过来更好:让JVM调用您的本机代码。

两者都需要使用Java Native Interface(JNI),但在第一种情况下,还有一些关于暴露给VM的本机功能的额外步骤。使用大规模本机应用程序可能难以满足这些额外要求。

请参阅the chapter 8.3 from the Java Native Interface Manual:

8.3注册本地方法

[...] 当本机应用程序嵌入虚拟机实现并需要与本机应用程序中定义的本机方法实现链接时, RegisterNatives 特别有用。虚拟机无法自动找到此本机方法实现,因为它只搜索本机库,而不是应用程序本身。

换句话说,必须手动将所有非dll_exported本机方法注册到VM。这是一个非常重要的要求。

答案 2 :(得分:0)

我不确切知道如何通过C ++运行JAR文件(除了显而易见的system()CreateProcess()fork()\exec()调用以逃避C ++适用于操作系统)。

也就是说,您可以考虑让您的应用程序包含多个独立的进程,这些进程通过TCP或UDP套接字进行通信。然后每件作品都可以用最有意义的语言书写。例如,您可以让应用程序的中心核心(用C ++编写)设置TCP服务器,然后使用“工具栏”应用程序(用Java编写)通过专用套接字连接将命令包发送到核心程序。想想看,UDP可能更好。无论如何,你明白了。

此外,不确定你拒绝Qt的原因 - 很多商业应用已经使用过它,而且它是可定制的(虽然我必须承认我自己并不是它的忠实粉丝,因为其他原因)。 / p>

答案 3 :(得分:0)

无论你做什么,都不要使用system()。 //这就是原因:http://www.cplusplus.com/forum/articles/11153/