Überwachen der Zwischenablage, aber wie?

Christoph22

Mitglied
Hallo,

in meinem Java Programm soll in eine TextArea automatisch ein kopierter Text eingefügt werden.
Genauer: Ich möchte, dass ich irgendwo mit STRG+C (oder rechtsklick-> kopieren) einen Text kopiere und dieser dann selbstständig eingefügt wird.

ich habe gelesen, dass es irgendwie mit dem ClipboardOwner und dem lostOwnership funktionieren soll, aber ich komme einfach nicht dahinter wie?

Wäre sehr dankbar wenn mir jemand einen Code Schnipsel posten könnte. In erster Linie geht es mir um den Code der dem Programm "sagt", dass sich die Zwischenablage geändert hat. Wie ich den Text aus der Zwischenablage in die TextArea bekomme weis ich.

Folgenden Code habe ich im Forum gefunden:

Java:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.Timer;
 
public class clipBordtest extends JFrame implements ActionListener {
 
    private Clipboard clip = null;
    Transferable old = null;
    Timer t;
 
    public clipBordtest() {
        setTitle("Clipbordtest");
        setAlwaysOnTop(true);
        setSize(new Dimension(250, 250));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        
        clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        old = clip.getContents(null);
        
        t = new Timer(500, this);
        t.start();
    }
 
 
    @Override
    public void actionPerformed(ActionEvent e) {
        Transferable trans = clip.getContents(null);
        try {
            if (trans.isDataFlavorSupported(DataFlavor.stringFlavor) && trans != null && !trans.getTransferData(DataFlavor.stringFlavor).equals(old.getTransferData(DataFlavor.stringFlavor))) {
                System.out.println("Old: " + old.getTransferData(DataFlavor.stringFlavor));
                System.out.println("New: " + trans.getTransferData(DataFlavor.stringFlavor));
                old = trans;
            }
        } catch (UnsupportedFlavorException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
    
    public static void main(String arg[]) {
        new clipBordtest();
    }
}

Hier kann allerdings der gleiche Text nicht zweimal kopiert werden (wenn man die entsprechende Abfrage (letze Bedingung in Zeile 40) löscht, produziert man eine Endlosschleife aufgrund des Timers).

Wenn jamend eine bessere Lösung hat wäre ich sehr dankbar, da diese hier nicht optimal ist.


Herzlichen Dank für eure Antworten!
 

Christoph22

Mitglied
Danke für die Antwort.
Ich habe etwas gegoogelt und folgendes zum Thema FlavorListener gefunden:

Java:
public class testneu extends JFrame implements FlavorListener{
 
    private Clipboard clip;
    private Transferable transferData;
 
    public testneu() {
        setTitle("Clipbordtest");
        setSize(new Dimension(250, 250));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);      
        clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        clip.addFlavorListener(this);
    }
    
    public static void main(String arg[]) {
        new testneu();
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
@Override
	public void flavorsChanged(FlavorEvent e) {
		
		//clip = Toolkit.getDefaultToolkit().getSystemClipboard();
		transferData = clip.getContents(null);
      
        try {
            String data = "";
            if (transferData != null) {
                data = (String) transferData
                        .getTransferData(DataFlavor.stringFlavor);
                System.out.println(data);
            } else {
                System.out.println("null");
            }
 
        } catch (UnsupportedFlavorException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }		
    }
}

Hier kann ich zwar den gleichen Text öfter kopieren, allerdings funktioniert das Kopieren nur sporadisch und ich bekomme dann immer folgende Fehlermeldung: "Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: cannot open system clipboard".

Was stimmt hier nicht? bzw. wie kann man das richtig lösen?
 

XHelp

Top Contributor
Direkt in der main:
[JAVA=17]
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
[/code]
 

Christoph22

Mitglied
achso, ja keine Ahnung, wie gesagt ich hab das in Google gefunden (dachte derjenige der das geschrieben hat, hat sich dabei was gedacht?!). Aber ich habs mit ohne diesem Abschnitt probiert, es kommt immter das gleiche raus.

Mehrfache Ausgabe des kopierten, Fehlermeldung, keine Ausgabe.
 

Wildcard

Top Contributor
Der FlavorListener reagiert nur wenn sich der Flavor (also der Typ der Daten) im Clipboard ändert, nicht wenn sich der Inhalt ändern. Die Art Listener die du suchst gibt es (aus Performance Gründen) nicht.
 

Christoph22

Mitglied
ok verstehe. und wie würdest du dann das problem lösen?
wie würdets du das mit dem flavorlistenter machen? bei mir funktioniert der ja auch nicht so wahnsinnig toll (siehe posts weiter oben).
 

XHelp

Top Contributor
Du könntest dir ja mal abgucken, wie andere es gemacht haben. Spontan würde mir die Klasse
Code:
jd.controlling.ClipboardHandler
von JDownloader einfallen... da ist es aber im großen und ganzen ein Thread, der ein Zeitabständen abfragt.

Oder du verzichtest auf die cross-platform Unterstützung und versuchst es mit den nativen Hooks zu lösen.
 

Christoph22

Mitglied
danke für den Tipp.
Mir ist das allerdings zu aufwendig, für das was ich vorhabe.

Nach tagelangem "Herumspielen" hab ich das nun einfach so gelöst, dass ich einen Button eingebaut habe, der mir die Zwischenablage löscht.
Kopieren funktioniert, wenn man hald zweimal das gleich kopiert haben will, muss man eben zuerst die Zwischenablage löschen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
hdi Überwachen des err-Streams? Allgemeine Java-Themen 8
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
M itext - Button der Text in Zwischenablage stellt Allgemeine Java-Themen 0
I Wie Vektor-Grafik in die Zwischenablage kopieren? Allgemeine Java-Themen 2
B In zwischenablage kopieren Allgemeine Java-Themen 2
M Zwischenablage/ Drag and Drop Allgemeine Java-Themen 9
S Zwischenablage lesen und schreiben Allgemeine Java-Themen 2
Daniel_L RTF - Format aus Zwischenablage erkennen und "einlesen"? Allgemeine Java-Themen 5
G Text aus Zwischenablage in JTextarea -> JDBC Error Allgemeine Java-Themen 3
S Bild aus Zwischenablage in Applet einfügen Allgemeine Java-Themen 2
G String in die Zwischenablage schreiben Allgemeine Java-Themen 5
P Überwachung der System-Zwischenablage Allgemeine Java-Themen 2
N Struct oder Record? Und COPY in und aus Zwischenablage Allgemeine Java-Themen 2
M Bild in Zwischenablage kopieren? Allgemeine Java-Themen 7
A Windows Zwischenablage Allgemeine Java-Themen 2
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
M Klasse durch Klassen Aufteilung verbessern, aber wo? Allgemeine Java-Themen 1
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
L Kursverlauf vorhersagen mit Deeplearning4j, aber komischer Knick am Anfang der Vorhersage Allgemeine Java-Themen 3
M Test geht auf Travis und mit Github Action schief aber nicht lokal Allgemeine Java-Themen 3
Zrebna FileUtils.cleanDirectory() - aber einen sub-Ordner "verschonen" Allgemeine Java-Themen 1
S Java.exe exestiert, aber irgendwie auch nicht Allgemeine Java-Themen 11
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
S Validation Null aber nicht Blank und muss Email sein Allgemeine Java-Themen 22
P Am Application Server - Selbe files aber trotzdem CNF Allgemeine Java-Themen 2
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
T PDF-Generierung (itext) - läuft unter Eclipse, bei har aber leere Seite Allgemeine Java-Themen 39
K Erste Schritte Start einer JAR Datei 2 Wege aber einmal nicht die volle Funktionlität Allgemeine Java-Themen 20
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
T Google OAuth 2.0 aber wie Allgemeine Java-Themen 16
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
K Programmfehler aber warum? Allgemeine Java-Themen 5
V Semikolonfehler,aber nicht lösbar.. Allgemeine Java-Themen 6
M String shuffeln, Anfang und Ende aber bleiben gleich Allgemeine Java-Themen 15
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
B NullPointerException - Aber kein Fehler im Code Allgemeine Java-Themen 4
T .dll in java benutzen aber wie? Allgemeine Java-Themen 4
B Input/Output version.cfg konnte nicht im Klassenpfad gefunden werden, ist aber dort. Allgemeine Java-Themen 0
L Prog läuft in der IDE, hängt sich aber am Mac auf Allgemeine Java-Themen 0
E Sms empfangen aber wie? Allgemeine Java-Themen 6
R Software ausliefern - Aber Wie? Allgemeine Java-Themen 10
D Input/Output Datei wird lokal aber nicht vom Webserver ausgelesen... Allgemeine Java-Themen 2
J Compiler-Fehler Compiliert unter Eclipse aber nicht mit javac Allgemeine Java-Themen 0
M Code läuft unter windows aber nicht unter Linux Allgemeine Java-Themen 6
B Threads Barrier mit wait()/notify() aber nicht alle Prozesse terminieren Allgemeine Java-Themen 2
S XML lesen, verarbeiten, speichern klappt in Eclipse, aber nicht in der JAR Allgemeine Java-Themen 4
R xx.xx.xx <-nur /w & /. aber !2x '.' hintereinander Allgemeine Java-Themen 6
P wieso kann ich auf bluej exportieren aber auf eclipse nicht? Allgemeine Java-Themen 2
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
A NoSuchMethod aber Methode ist da! Allgemeine Java-Themen 4
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
T Jar File läuft unter Windows aber nicht unter linux Allgemeine Java-Themen 10
S java.util.ConcurrentModificationException - aber nur ein Thread Allgemeine Java-Themen 3
nrg Auszulagernder Part, der aber variable Methode/Klasse aufruft Allgemeine Java-Themen 7
F Verschlüsseln, aber welcher Algo Allgemeine Java-Themen 29
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9
D Internet Abfrage aber mit Warteschleife Allgemeine Java-Themen 6
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
K iText, HTML Einrückung im Document, aber nicht im Paragraph Allgemeine Java-Themen 3
F NullPointerException aber warum ? Allgemeine Java-Themen 9
S exec( "cmd /c") aber Konsole soll offen bleiben Allgemeine Java-Themen 9
K event dispatch thread fehler. Compiler meckert nicht aber der Interpreter? Warum?? Allgemeine Java-Themen 11
J Funktioniert aber nicht gut erweiterbar Allgemeine Java-Themen 3
M net4j in Eclipse, installiert aber nicht im Build-path Allgemeine Java-Themen 4
J Process beenden ...aber wie ? Allgemeine Java-Themen 19
D Scanner leer aber bufferedReader nicht?! Allgemeine Java-Themen 2
B Exception wird geworfen, ich darf sie aber nicht abfangen. Allgemeine Java-Themen 10
J Comparable aber nicht immer Allgemeine Java-Themen 15
T JConsole: Klassen werden geladen aber nicht wieder entladen Allgemeine Java-Themen 3
T Datenbank lässt sich un Entwicklungsumgebung öffnen, aus .jar aber nicht Allgemeine Java-Themen 9
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
FoolMoon Datei zeilenweise einlesen, aber nicht die erste Zeile! Allgemeine Java-Themen 3
D Ich möchte meine *.java Dateien in Applets "umschreiben. Aber wie? Allgemeine Java-Themen 3
W Bild Spiegeln, aber Originalbild ausblenden Allgemeine Java-Themen 2
T Array durchsuchen - aber richtig Allgemeine Java-Themen 7
H Layout auslagern, aber wie genau??? Allgemeine Java-Themen 11
M 2 Methoden, 2 Rückgabewerte, aber ein Ergebnis Allgemeine Java-Themen 7
A programm anhalten aber wie? Allgemeine Java-Themen 4
M Ein Array-Wert soll sich verändern, aber 2 tun es? Allgemeine Java-Themen 7
Y ProcessBuilder, Prozess wird gestartet, aber Anwendung nicht Allgemeine Java-Themen 5
J Variabeln immer klein aber. Allgemeine Java-Themen 4
G Software fuer Auktionshaus Filmundo.de aber wie? Allgemeine Java-Themen 2
T Einzelnes Zeichen von der Tastatur einlesen, aber ohne Enter Allgemeine Java-Themen 4
H StartupFolder nutzen! Aber wie? Allgemeine Java-Themen 4
B Programm läuft unter Linux, aber nicht unter Windows Allgemeine Java-Themen 3
S instanceof liefert true, aber cast funktioniert nicht! Allgemeine Java-Themen 6
G Methode akzeptiert List<ParentClass> aber nicht List&l Allgemeine Java-Themen 2
V JAR-File läuft unter Windows und Linux, aber nicht unter OSX Allgemeine Java-Themen 6
M Setter-Methode wird aufgerufen aber ändert nichts? Allgemeine Java-Themen 8
O Vektoren in Vektor sortieren aber mit Java 1.4 (!) Allgemeine Java-Themen 4
G NullPointerException, aber warum? Allgemeine Java-Themen 10
lumo Row Header ist public, zeigt die funktion aber nicht public Allgemeine Java-Themen 8
D Image runterscalieren, aber schlechte Quali? Allgemeine Java-Themen 3
7 Inhalt eines Objekts leeren aber Objekt nicht löschen Allgemeine Java-Themen 17

Ähnliche Java Themen

Neue Themen


Oben