绑定java swing gui和c++;独立应用程序的后端,形成两个不同的项目

绑定java swing gui和c++;独立应用程序的后端,形成两个不同的项目,java,c++,swing,java-native-interface,Java,C++,Swing,Java Native Interface,我想将JAVA Swing GUI与C++后端绑定为独立应用程序。这两个项目构成了两个不同的项目。我读过关于Java本机接口的文章。尽管JNI似乎是最好的解决方案,但我对JNI有几个问题: JNI能帮我绑定不同的项目吗(一个在JavaSwing中,另一个在JavaSwing中) 在c++)中 如果是,它与绑定同一项目中的文件有什么不同 作为JNI的新手,详细的技术帮助会很有帮助 对 帮助我们执行从java调用C++库的操作。p> 我猜你正在计划GUI和C++在同一个进程(如果是的JNI是答案,如

我想将JAVA Swing GUIC++后端绑定为独立应用程序。这两个项目构成了两个不同的项目。我读过关于Java本机接口的文章。尽管JNI似乎是最好的解决方案,但我对JNI有几个问题:

  • JNI能帮我绑定不同的项目吗(一个在JavaSwing中,另一个在JavaSwing中) 在c++)中
  • 如果是,它与绑定同一项目中的文件有什么不同
  • 作为JNI的新手,详细的技术帮助会很有帮助

  • 帮助我们执行从java调用C++库的操作。p> <>我猜你正在计划GUI和C++在同一个进程(如果是的JNI是答案,如果没有,你必须求助于进程内通信)。
  • 您必须动态绑定来自不同语言的项目
  • Java是托管内存,这意味着您对内存没有真正的所有权(Allwighty GC决定是否删除某些内容)

    C++是非托管内存,这意味着您将不得不收拾自己的垃圾

    有了这个区别,很明显,当彼此交互时,您需要确保不要删除分配给彼此的内存

    这是您在同一项目中绑定文件时遇到的差异之一

    另一个是,您将求助于动态链接

    <> P> java代码编译成中间,C++代码编译成CPU专用汇编程序。这意味着您不能将代码从一个转换到另一个

    因此,我们求助于动态链接

    < > C++代码将编译成共享库(SO或.DLL,这取决于平台)。在运行时,java Swing应用程序(将作为入口点)将把动态库加载到程序的内存中(您需要从代码中手动调用它,如果我没记错的话,System.loadLibrary就是这个函数)

    一旦加载了库,如果您正确构建了库(为此,您需要遵循教程,这里我不打算对此进行解释),您就可以在java中导出.dll符号

    使用JNI的通常做法是创建一个桥库,将多个C++函数链接到java中的桥类。p>
    <> P>有一些自动程序为你创建了这个桥(比如SWIG),但是我强烈建议你避免它们(尤其是因为你没有java JNI的完整把握).< /P>我不确定这个项目的意图是通过JNI绑定Java和C++。似乎更需要在C++中创建一个应用程序,通过网络提供服务,并且使用java(可能是套接字)来使用它们,因此没有JNI参与。我没有得到“网络”和“java”(插座)的意思。“请详细说明一下?呃……一个C++应用程序,它通过端口和一个定义的通信协议来公开服务,然后在客户端应用程序(java或其他)中公开。您通过使用套接字连接到该服务并使用该通信协议发送数据流,JNI根本不涉及。看起来您是新的网络连接者,或者这可能不是您工作的一部分。您具体的要求或工作要做什么?我根本不熟悉网络。C++后端代码已经在使用。在命令行中,我必须为这个C++后端开发一个GUI。java是从大学毕业的作业还是项目?你从工作中收到这个项目吗?非常感谢。这非常有用。