J
Jack Gruber
Gast
Hallo,
ich habe ein kleines Problem mit dem System-Clipboard unter Java. Das Einfügen und Auslesen funktioniert ja eigentlich ganz gut. Nur in Verbindung mit dem AWT-Robot scheint es nicht so ganz zu funktionieren.
Nehme ich eine Textdatei, markiere dort automatisch eine Text-Zeile, füge diese über Strg+C ins System-Clipboard ein (alles über den AWT-Robot) und lese die Zeile aus, dann kann ich die Zeile ganz normal im Java-Programm auswerten.
Das funktioniert allerdings nicht, wenn ich zuvor über die Methode clipboard.setContents(stringSelectionData, stringSelectionData) etwas ins Clipboard eingefügt habe. Ich kann dann nur das, was ich über SetContents eingefügt habe, auch wieder auslesen. Text, den ich danach über Strg+C ins Clipboard kopiere, kann ich nicht mehr auslesen.
Beende ich das Programm, und drücke dann manuell Strg+V, dann kopiert er mir aber den per Strg+C ins Clipboard eingefügte Text und nicht den zuvor über SetContents eingefügten Text. Also eigentlich so, wie ich es haben möchte.
Ich habe hier mal einen Ausschnitt des Codes, um mein Problem zu verdeutlichen:
Das Ergebnis dieses Codes ist immer: Clipboard-Inhalt: Eingefügter Text.
Drücke ich nach dem Programm-Ablauf Strg+V, dann fügt er mir die im Word-Pad markierte Text-Zeile ein.
ich habe ein kleines Problem mit dem System-Clipboard unter Java. Das Einfügen und Auslesen funktioniert ja eigentlich ganz gut. Nur in Verbindung mit dem AWT-Robot scheint es nicht so ganz zu funktionieren.
Nehme ich eine Textdatei, markiere dort automatisch eine Text-Zeile, füge diese über Strg+C ins System-Clipboard ein (alles über den AWT-Robot) und lese die Zeile aus, dann kann ich die Zeile ganz normal im Java-Programm auswerten.
Das funktioniert allerdings nicht, wenn ich zuvor über die Methode clipboard.setContents(stringSelectionData, stringSelectionData) etwas ins Clipboard eingefügt habe. Ich kann dann nur das, was ich über SetContents eingefügt habe, auch wieder auslesen. Text, den ich danach über Strg+C ins Clipboard kopiere, kann ich nicht mehr auslesen.
Beende ich das Programm, und drücke dann manuell Strg+V, dann kopiert er mir aber den per Strg+C ins Clipboard eingefügte Text und nicht den zuvor über SetContents eingefügten Text. Also eigentlich so, wie ich es haben möchte.
Ich habe hier mal einen Ausschnitt des Codes, um mein Problem zu verdeutlichen:
Code:
// Text ins Clipboard einfügen.
Clipboard clipboard = getToolkit().getSystemClipboard();
StringSelection stringSelectionData = new StringSelection("Eingefügter Text");
clipboard.setContents(stringSelectionData, stringSelectionData);
// Im Word-Pad eine Text-Zeile markieren.
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_DOWN);
robot.keyRelease(KeyEvent.VK_DOWN);
robot.keyRelease(KeyEvent.VK_SHIFT);
// Markierte Text-Zeile ins Clipboard kopieren.
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_CONTROL);
String clipboardText="";
try
{
// Der Content des Clipboards wird geholt.
Transferable contents = clipboard.getContents(this);
// StringFlavor is when you want an ordinary String. PlainTextFlavor is for when you want a StringReader
// instead of a String.
if (contents.isDataFlavorSupported(DataFlavor.stringFlavor))
{
// Aus dem Content-Objekt wird der Text geholt.
clipboardText = (String) contents.getTransferData(DataFlavor.stringFlavor);
}
}
catch (UnsupportedFlavorException ex) {System.out.println(ex);}
catch (IOException ex) {System.out.println(ex);}
System.out.println("Clipboard-Inhalt: " + clipboardText);
Das Ergebnis dieses Codes ist immer: Clipboard-Inhalt: Eingefügter Text.
Drücke ich nach dem Programm-Ablauf Strg+V, dann fügt er mir die im Word-Pad markierte Text-Zeile ein.