我使用JNI从C中启动Java应用程序。尽管只要我使用控制台应用程序,就可以快速完成此任务,但对于Swing-GUI,事情会变得棘手。我可以从Java调用C-Executable的函数吗?
为了让应用程序“活着”,我使用了一个while循环,只要GUI没有关闭就运行。当这个循环运行时,它总是请求,如果应用程序仍然通过请求布尔值运行。
while(javaRunning){
if(JNI_FALSE == env->CallBooleanMethod(obj, boolMethod))
javaRunning = false;
}
当Java函数WindowClosing(Event)被调用来指示用户关闭窗口时,该值将被改变。
不幸的是,如果关闭窗口,这不起作用。即使窗口已关闭,C应用程序仍会尝试请求布尔值。它显然无法在窗口关闭前获取布尔值。 更好的方法是从Java调用C代码来通知它“WindowClosing”事件。
就我所见,如果C代码是由Java加载(使用DLL)而不是通过调用接口加载C instanciates并启动Java应用程序,那么这将是可能的。 也许任何人都知道如何解决这个问题。
如果你已经回答了你自己的问题,你应该在下面发表答案作为答案并接受它 - 这是完全有效的,并且避免每个人都打开问题,因为他们认为这是没有答案的。 – Steve 2012-02-13 15:45:06
当然我会这样做 - 不幸的是,我不能在接下来的6小时内这样做... – SideEffect 2012-02-13 16:04:10