Wie kann ich Java-Apps stoppen / umgehen, die den Fokus in Linux-Fenstermanagern stehlen?

Wir möchten schnell Widgets in Java prototypisieren. Wir legen sie auf ein Display, das in einem proprietären Grafikpaket von Drittanbietern geschrieben ist. Wir stellen fest, dass die Java-GUI dem Fenstermanager den Tastaturfokus nimmt.

Der Fenstermanager ist fvwm. Ich habe versucht, ihn so zu konfigurieren, dass die Java-App so eingerichtet ist, dass sie nicht den Fokus erhält. Außerdem muss sie, falls sie jemals den Fokus erhält, entfernt und an die andere GUI weitergegeben werden.

Wenn ich dies mit der Java-App ausführe, funktioniert es nicht (wenn sich die Maus über der Java-GUI befindet, hat sie den Tastaturfokus). Wenn ich ein Standard-X-GUI-Widget (XEyes) anstelle der Java-GUI tausche, funktioniert es wie ein Charme. Dies verleiht der Behauptung, dass Java den ICCCM nicht einhält, einen gewissen Glaube

Ich frage mich, ob andere Leute dieses Problem gelöst haben und wenn ja wie. Bisher habe ich ein paar Möglichkeiten, wie ich das beheben kann:

1) JAVA-Einstellungen ändern, in der Hoffnung, dass beim Deaktivieren des Fokus die Fokussteuerung möglicherweise an den Fenstermanager zurückgegeben wird (ich habe bisher versucht, "setFocusable (false)" auf dem übergeordneten JFrame festzulegen. Dies funktionierte nicht. Ein Thread "http: //java.sun.com/javase/6/webnotes/trouble/TSG-Desktop/html/awt.html#gdaa "gab an, dass ich stattdessen" Window.setFocusableWindowState (false) "ausführen sollte. Die betreffende GUI wurde noch nicht in einem Fenster überarbeitet, aber ich bin auch nicht vollständig davon überzeugt, dass Java den Fokus aufheben wird.

2) Mit JNI X-Aufrufe auf niedriger Ebene im Java-Programm ausführen. Ich denke, das würde wahrscheinlich funktionieren, aber ich habe noch nie viel mit Low Level X gespielt. Ich bin mir nicht sicher, welche Aufrufe ich verwenden soll (XtSetKeyboardFocus () sollte gefährlich sein, anzurufen ...) oder wie ich mich identifizieren kann Die GUIs, auf denen ich arbeite (in dieser Hinsicht war fvwm nett, da sie eine GUI hatten, mit der Sie auf eine andere GUI klicken und deren "Name" und "Klasse" herausfinden konnten)

3) benutze einen "stärkeren" Fenstermanager. Einige Fenstermanager, die ICCCM nicht verwenden, können möglicherweise besser mit Java umgehen. Natürlich gibt es eine Vielzahl von Managern, und ich bin mir nicht sicher, worauf ich mich konzentrieren soll. Ebenso scheinen viele die Festlegung des Fokus per App zu verkürzen (die meisten scheinen sich nur um allgemeine Richtlinien zu kümmern).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage