Ich habe eine Bildverarbeitungsanwendung geschrieben, bei der der GUI-Teil in Java geschrieben ist und der Zahlenverarbeitungsteil in C geschrieben ist und über JNI aufgerufen wird.
Mein Problem ist, dass es 20 - 30 Sekunden dauert, bis die Anwendung ein Bild verarbeitet, und während dieser Zeit verschwindet die Anwendung aus dem Task Switcher (das Alt-Tab-Ding) und es ist nicht möglich, das Fenster der Anwendung in den Vordergrund zu verschieben (das ist mein Hauptanliegen). Es ist immer noch möglich, die Anwendung über die Taskleiste in den Vordergrund zu bringen.
Einige weitere Informationen:
- Die Anwendung hängt nicht fest oder so, ich kann sehen, dass sie wie erwartet einen Fortschrittsbalken aktualisiert.
- Wenn die Berechnung abgeschlossen ist, wird die Anwendung im Task-Switcher angezeigt und kann wieder das oberste Fenster werden. Wenn ich eine neue Berechnung starte, verschwindet die Anwendung wieder aus dem Task-Switcher.
- Der JNI-Aufruf erfolgt in einem separaten Thread (vom EDT), ich habe sowohl den Hauptthread als auch einen erstellten Thread ausprobiert.
- Der EDT ist nicht blockiert. Ich habe printfs in den Methoden von WindowListener und WindowFocusListener hinzugefügt und wenn das Fenster den Fokus verliert, werden die entsprechenden Methoden aufgerufen.
- Unter Mac OS X funktioniert die Anwendung ohne Probleme.
- Dies geschieht mit Java 1.6 auf Windows 2003 Server.
- Zuerst dachte ich, dass es openMP war, das etwas Unangenehmes mit den Threads anstellte, aber das Ausschalten machte keinen Unterschied.
- Die JNI-Bibliothek wird mit MinGW 4.5 kompiliert.
Ich habe den Eindruck, dass Windows erwartet, dass eine Anwendung einige Anfragen beantwortet/sendet, da sie sonst aus dem Task Switcher geworfen wird. Aber ich weiß nicht einmal genug über Windows-Programmierung, um nach einer Antwort googeln zu können. Kann mir jemand ein paar Tipps geben?