【发布时间】:2011-03-20 20:53:45
【问题描述】:
我编写了一个图像处理应用程序,其中 GUI 部分用 Java 编写,数字运算部分用 C 编写并通过 JNI 调用。
我的问题是应用程序处理图像需要 20 - 30 秒,在此期间应用程序从任务切换器(Alt-Tab 的东西)中消失,并且无法将应用程序的窗口移动到前面(这是我主要关心的问题)。仍然可以通过任务栏将应用程序置于最前面。
更多信息:
- 应用程序没有卡住什么的,我可以看到它按预期更新了一个进度条。
- 计算完成后,应用程序将显示任务切换器,并可以再次成为顶部窗口。如果我开始新的计算,应用程序将再次从任务切换器中消失。
- JNI 调用是在单独的线程(来自 EDT)上进行的,我已经尝试过主线程和创建的线程。
- EDT 未被阻止。我在 WindowListener 和 WindowFocusListener 的方法中添加了 printfs,如果窗口失去焦点,则会调用相应的方法。
- 在 Mac OS X 上,该应用程序可以正常运行。
- 这是在 Windows 2003 Server 上的 Java 1.6 上。
- 首先我认为是 openMP 对线程做了一些讨厌的事情,但关闭它并没有任何区别。
- JNI 库是使用 MinGW 4.5 编译的。
在我看来,Windows 期望应用程序回答/发送一些请求,否则它将被抛出任务切换器。但我什至对 Windows 编程知之甚少,甚至无法通过谷歌搜索答案。谁能指点一下?
【问题讨论】:
-
您能否转移到客户端-服务器范式,在服务器中进行数字处理,更新文件,以便用户始终可以使用 java 应用程序?服务器可以通过套接字连接发送更新,您只需断开两者。
-
哦,这似乎有点激烈,因为这是应该起作用的其中之一。 :-D
标签: java windows java-native-interface openmp