J
jo
Gast
Hallo!
Ich habe ein Problem beim Arbeiten mit der Zwischenablage mit einem Java-Programm. Vorneweg: Ja, ich habe bereits die Suche des Forums bemüht und keinen entsprechenden Beitrag gefunden, bin überhaupt schon ne Woche an dem Problem dran und heute erst auf das Forum gestoßen.
Möglicherweise ist das Problem dennoch völlig trivial, aber ich komme einfach nicht weiter.
Zur Funktion meines Programms: Beim Starten wird die Systemzwischenablage mit einem Listener versehen, der immer, wenn in einem beliebigen anderen Programm etwas in die Zwischenablage kopiert wird, prüft, ob es sich dabei um Text handelt und wenn ja diesen Text intern weiterverarbeitet.
Unter Windows funktioniert das sehr schön mit folgendem Code. Unter Linux jedoch habe ich das Problem, dass wenn ich z. B. aus Firefox ein Wort kopiere, das Programm das erkennt. OK. Wenn ich dann direkt danach wieder in Forefox etwas kopiere, erkennt mein Programm es nichtmehr. Ich muss erst aus einem andern Programm, gedit o. ä., ein Wort kopieren, das erkennt er dann wieder. Das Problem hatte ich erst auch unter Windows, habe aber einige Codezeilen eingefügt (speziell kommentiert), so dass es da nichtmehr auftrat. Unter Linux bringt das nix.
Sieht irgendjemand wo das Problem liegen könnte? Oder hat zumindest eine Ahnung, wie ich dieses plattformspezifische Verhalten in den Griff kriegen könnte?
Schonmal besten Dank für die Hilfe!
Ich habe ein Problem beim Arbeiten mit der Zwischenablage mit einem Java-Programm. Vorneweg: Ja, ich habe bereits die Suche des Forums bemüht und keinen entsprechenden Beitrag gefunden, bin überhaupt schon ne Woche an dem Problem dran und heute erst auf das Forum gestoßen.
Möglicherweise ist das Problem dennoch völlig trivial, aber ich komme einfach nicht weiter.
Zur Funktion meines Programms: Beim Starten wird die Systemzwischenablage mit einem Listener versehen, der immer, wenn in einem beliebigen anderen Programm etwas in die Zwischenablage kopiert wird, prüft, ob es sich dabei um Text handelt und wenn ja diesen Text intern weiterverarbeitet.
Unter Windows funktioniert das sehr schön mit folgendem Code. Unter Linux jedoch habe ich das Problem, dass wenn ich z. B. aus Firefox ein Wort kopiere, das Programm das erkennt. OK. Wenn ich dann direkt danach wieder in Forefox etwas kopiere, erkennt mein Programm es nichtmehr. Ich muss erst aus einem andern Programm, gedit o. ä., ein Wort kopieren, das erkennt er dann wieder. Das Problem hatte ich erst auch unter Windows, habe aber einige Codezeilen eingefügt (speziell kommentiert), so dass es da nichtmehr auftrat. Unter Linux bringt das nix.
Code:
private Clipboard systemClipboard;
...
private void zwischenablageIntegrieren() {
systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
// diese beiden Zeilen musste ich einfügen, damit es unter Windows klappt
Transferable transferData = systemClipboard.getContents(null);
systemClipboard.setContents(transferData, null);
FlavorListener zwischenablageUeberwachen = new FlavorListener() {
public void flavorsChanged(FlavorEvent e) {
Transferable transferData = systemClipboard.getContents(null);
for (DataFlavor dataFlavor : transferData.getTransferDataFlavors()) {
try {
Object content = transferData.getTransferData(dataFlavor);
if ((dataFlavor.getMimeType().startsWith("text/plain") && (content instanceof String))) {
String inhalt = (String) content;
rufeTolleFunktionAuf(inhalt.trim());
break;
}
} catch (Exception a) {
System.out.println("Fehler!");
}
}
// auch diese Zeile musste ich einfügen, damit es unter Windows läuft
systemClipboard.setContents(transferData, null);
}
};
systemClipboard.addFlavorListener(zwischenablageUeberwachen);
}
Sieht irgendjemand wo das Problem liegen könnte? Oder hat zumindest eine Ahnung, wie ich dieses plattformspezifische Verhalten in den Griff kriegen könnte?
Schonmal besten Dank für die Hilfe!