Objekt-Austausch zwischen zwei Programmen über System-Clipboard

Kaffeebohn

Bekanntes Mitglied
Hallo zusammen,

Ich habe ein Programm, dass eine Anzahl von Objekten (Reine "Daten-Container") verwaltet. Diese können innerhalb des Programms problemlos über das System-Clipboard kopiert und wieder eingefügt werden. Funktioniert alles wunderbar.

Wenn ich das Programm nun jedoch 2x starte, und versuche, Objekt in der einen Instanz zu kopieren und in der anderen Instanz einzufügen, schlägt dies jedesmal fehl (java.awt.datatransfer.UnsupportedFlavorException). Ich habe hierzu eine Klasse geschrieben, die Transferable implementiert und die Daten-Container enthält.

Gibt es grundsätzlich Probleme damit, Objekte (keine Strings oder reinen Text) über JVM-Grenzen hinweg über das System Clipboard zu kopieren, oder habe ich nur irgend einen Fehler gemacht? Wenn dem so ist würde ich entsprechenden Code nachreichen.

Liebe Grüße,

Kaffeebohn
 
Hi Sebastian,

es handelt sich bei meinem Programm um ne Zeichenfläche auf der gewisse Elemente verschoben und vernetzt werden können. Mein Ziel ist es deswegen konkret, Die Elemente aus einer geöffneten Datei einfach quasi ähnlich wie bei Drag and Drop rüberkopieren zu können. Also wie z.B. in Excel, wenn man einige Formen markiert und diese kopiert und in eine andere Excel-Datei einfügt.

Liebe Grüße,
Kaffeebohn

//EDIT
http://www.java-forum.org/java-basi...kt-zwischen-2-java-programmen-copy-paste.html
hier gibts ein ähnliches Problem, mit der Empfehlung, das Objekt in einen String zu serialisieren und den String zu übertragen.

P.S: KSG9...habt ihr nicht früher die IBL gemacht?
 
Ich hab jetzt durch Zufall die Lösung gefunden. für alle die auch noch drüber stolpern:

Es ist grundsätzlich möglich, Java Objekte in die System-Zwischenablage zu kopieren. In der Klasse, die das Transferable implementiert, muss jedoch ein DataFlavor angegeben werden, der exakt mit dem zu übermittelnden Objekt übereinstimmt.

Innerhalb einer JVM reicht es, das Flavor so zu definieren:

new DataFlavor(java.lang.Object.class, "Java Object");

Da ich in meinem Beispiel allerdings eine ArrayList übertragen möchte, muss (wenn man zwischen mehreren Instanzen kopieren möchte) auch konkret angegeben werden:

new DataFlavor(java.util.ArrayList.class, "Java Object");

Danke und liebe Grüße,
Kaffeebohn
 

Zurück
Oben