JNI Call JavaGUI from C++
JNI Call JavaGUI from C++
我正在使用VS2015,我试图从c++托管java GUI应用程序,以便我可以在我的WPF应用程序(容器)中嵌入c++代码。所以我开始尝试JNI,但到目前为止还没有成功。你能告诉我,如果这个想法可以工作,什么错误在我的代码可以。我知道已经有一些关于这个话题的帖子,但是没有一个对我有帮助。
c++代码看起来像这样:#include <stdio.h>
#include <conio.h>
#include "C:Program FilesJavajdk1.8.0_51includejni.h"
#include "ToolbarFrame2.h"
JNIEnv* create_vm()
{
JavaVM* jvm;
JNIEnv* env;
JavaVMInitArgs args;
JavaVMOption options[1];
args.version = JNI_VERSION_1_8;
args.nOptions = 1;
options[0].optionString = "- Djava.class.path=
d:EclipseProjectsSwingTest01bin";
args.options = options;
args.ignoreUnrecognized = JNI_TRUE;
JNI_CreateJavaVM(&jvm, (void **)&env, &args);
return env;
}
void invoke_class(JNIEnv* env)
{
jclass helloWorldClass;
jmethodID mainMethod;
helloWorldClass = env->FindClass("ToolbarFrame2");
mainMethod = env->GetStaticMethodID(helloWorldClass,
"main", "([Ljava/lang/String;)V");
env->CallStaticVoidMethod(helloWorldClass, mainMethod);
}
int main(int argc, char **argv)
{
JNIEnv* env = create_vm();
invoke_class(env);
}
这是java类:
public class ToolbarFrame2 extends JFrame {
public ToolbarFrame2() {
initUI();
}
private void initUI() {
JButton quitButton = new JButton("Quit");
quitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
this.createLayout(quitButton);
setTitle("Simple example");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void createLayout(JComponent... arg) {
Container pane = getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
gl.setAutoCreateContainerGaps(true);
gl.setHorizontalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
);
gl.setVerticalGroup(gl.createSequentialGroup()
.addComponent(arg[0])
);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ToolbarFrame2 ex = new ToolbarFrame2();
ex.setVisible(true);
}
});
}
}
我从我的JAVA程序(使用javah)中创建了一个头文件,并包括jni_h和jni_md.h。我还添加了一个额外的依赖到我的项目在VS(在属性->链接器->输入->额外的依赖):
C: Program Files Java jdk1.8.0_51 lib
但是当我尝试编译我的c++代码时,编译时会抛出这个错误:
LNK1104无法打开"C:Program FilesJavajdk1.8.0_51lib"文件。obj '
我不知道还应该包括什么或者我做错了什么(而且这个文件甚至不存在于那个目录中)。
附加依赖项应该是:
C:Program FilesJavajdk1.8.0_51libjvm.lib
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- std::async from std::async in windows xp
- std::is_reference from std::any
- std::time_point from and to std::string
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- std::chrono::time_point from std::string
- Visual accept std::string from std::byte iterator
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- from std::vector to adept::avector
- qt get child (Callout) from QChart
- Webassembly from Javascript
- Generate boost::uuids::uuid from boost::compute::detail::sha
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- Calling C++ dll from python
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- std::chrono 在从 main 或 from 类方法使用时给出不同的值
- Calling Python Script from Visual Studio C++ Solution
- Access C++ Enum from Swift