我有一个java应用程序(1.7 64位),我称之为c dll,我是通过JNI使用cygwin编译的。 c dll回调Java以将一些值传递给方法。所有这一切似乎都有效,只是在几秒钟后JNI调用返回后java程序关闭。但是,如果我将程序作为终端程序运行(没有UI),它运行正常。如果从UI调用它是重要的,它从按钮点击调用。任何见解将不胜感激。
从GUI报告错误:
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (default-cli) on project My Proj: Command execution failed. Process exited with an error: -1073741819 (Exit value: -1073741819) -> [Help 1]
To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.
For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
c功能
JNIEXPORT jint JNICALL Java_com_accessory_myaccessory_jni_dll_cfunction(JNIEnv *env, jclass class, jlong a, jobject b, jdouble c, jdouble d, jchar e, jchar f, jobject g) {
return 0;
}
java代码
long a= 0;
MyClass1 b= new MyClass1();
double c = 1;
double d = 0;
char e = 0;
char f = 0;
MyClass2 g= new MyClass2();
int r = dll.cFuction(a, b, c, d, e, f, g);
System.out.println("ret = " + r);
java代码
public class dll {
static {
System.load("C:/development/mydll/dist/Debug/Cygwin_4.x-Windows/my.dll");
}
public static native int cFunction(long a, MyClass1 b, double c, double d,char e, char f, MyClass2 g);
}
附加说明: 即使我从c中删除了我的jni方法中的所有代码并且只返回0我也得到相同的行为
答案 0 :(得分:0)
作为测试,尝试通过启动新线程跳出事件线程 将调用转换为本机代码。如果你仍然看到失败,那里 可能是除了差异之外还有其他事情导致问题 在GUI与非GUI中。免责声明:这不是烫发定型,而是P / D行动。
badButton.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
final Thread t = new Thread(new Runnable() {
@Override
public void run() {
callNativeCode();
}
});
t.setDaemon(true);
t.start();
}
});