मैं उसी एप्लिकेशन के विभिन्न उदाहरणों के बीच ऑब्जेक्ट्स की कॉपी-पेस्ट को कार्यान्वित करने की कोशिश कर रहा हूं। वर्तमान में यह केवल एक आवेदन में काम करता है (मेरा मतलब है, आवेदन के उसी उदाहरण में कॉपी और पेस्ट करें), लेकिन विभिन्न उदाहरणों के बीच काम नहीं करता है।जावा: उसी एप्लिकेशन के विभिन्न उदाहरणों के बीच जावा ऑब्जेक्ट्स कॉपी करने के लिए क्लिपबोर्ड का उपयोग करें
प्रतिलिपि बनाई जा रही कोड:
// MyObject is a class of objects I want to copy/paste;
// MyObjectSelection is a class that impements Transferable and ClipboardOwner interfaces
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
MyObject data = new MyObject(selectedItems);
MyObjectSelection dataSelection = new MyObjectSelection(data);
clipboard.setContents(dataSelection, this);
उसके बाद, मैं क्लिपबोर्ड की सामग्री की जाँच कर सकते हैं, इस तरह:
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable clipboardContent = clipboard.getContents(this);
DataFlavor[] flavors = clipboardContent.getTransferDataFlavors();
System.out.println("flavors.length=" + flavors.length);
for (int i = 0; i < flavors.length; i++){
System.out.println("flavor=" + flavors[i]);
}
मैं एक ही आवेदन उदाहरण है कि मैं वस्तु की नकल की से ऐसा करते हैं तो यह, काम करता है: flavors.length
1
है, mimetype application/x-java-serialized-object
है, और, ठीक है, यह काम करता है।
लेकिन अगर मैं अनुप्रयोग खोलें, कॉपी करते हैं, तो एक ही आवेदन फिर से (पहले एक बंद नहीं है, अर्थात दोनों मामलों एक साथ चल रहे हैं) खोलने के लिए, और वहाँ से क्लिपबोर्ड सामग्री की जाँच करने के लिए प्रयास करते हैं, तो flavors.length
0
है।
मैंने दस्तावेज़ों और इन उदाहरणों की जांच की: one, two, लेकिन मुझे अभी भी पता नहीं है कि मेरे कार्यान्वयन में क्या गलत है।
क्या मुझे कुछ याद आया?
युपीडी: clipboard_test.zip: मैं sscce गयी।
इस परीक्षा आवेदन (मैं ग्रहण का उपयोग यह निर्माण करने के लिए) 3 स्रोत फ़ाइलों के साथ है: - मुख्य अनुप्रयोग वर्ग
MyObject.java
-
ClipboardTest.java
कॉपी करने के लिए वस्तुओं के लिए वर्ग/पेस्ट (इस वर्ग के सिर्फ सरणी शामिलString
का)MyObjectSelection.java
- वर्ग किTranserable
औरClipboardOwner
इंटरफेसलागू करता है वहाँ tw हैं ओ बटन: "कॉपी", "परीक्षण"।
जब आप "प्रतिलिपि" बटन दबाते हैं, तो MyObject का नया उदाहरण बनाया गया है और क्लिपबोर्ड पर रखा गया है।
जब आप प्रेस "परीक्षण" बटन, क्लिपबोर्ड सामग्री जाँच कर रहे हैं और गूँजती कंसोल के लिए (समर्थित
DataFlavor
की की गिनती, और प्रत्येकDataFlavor
)तो, इन चरणों का दोहराने:
प्रारंभ आवेदन
- प्रेस "प्रतिलिपि" बटन: आप लॉग में
"object copied"
संदेश देखेंगे "परीक्षण" बटन प्रेस: आप क्लिपबोर्ड की सामग्री को देखेंगे :
flavors.length = 1 flavor[0] = java.awt.datatransfer.DataFlavor[mimetype=application/x-java-serialized-object;representationclass=MyObject]
आवेदन का एक और उदाहरण प्रारंभ करें (बंद नहीं करते पहले एक)
प्रेस "परीक्षण" बटन:
flavors.length = 0
वह क्यों है?
UPD2: sscce सीधे यहां पोस्ट:
import java.awt.BorderLayout;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
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.awt.Toolkit;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import javax.swing.JFrame;
public final class ClipboardTest implements Runnable, ClipboardOwner {
public static void main(String[] args) {
SwingUtilities.invokeLater (new ClipboardTest());
}
public void run() {
JFrame f = new JFrame ("Clipboard test");
f.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
//-- Create "copy" button.
// When you click it, new object "test_items" becomes created
// and put to the clipboard.
{
JButton button_copy = new JButton("copy");
button_copy.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String[] test_items = {
"one", "two", "three"
};
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
MyObject data = new MyObject(test_items);
MyObjectSelection dataSelection = new MyObjectSelection(data);
clipboard.setContents(dataSelection, ClipboardTest.this);
System.out.println("object copied");
}
});
f.add(button_copy, BorderLayout.NORTH);
}
//-- Create "test" button.
// When you click it, clipboard contents are checked
// and echoed to the console (count of supported DataFlavor's, and each DataFlavor)
{
JButton button_test = new JButton("test");
button_test.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable clipboardContent = clipboard.getContents(this);
DataFlavor[] flavors = clipboardContent.getTransferDataFlavors();
System.out.println("flavors.length = " + flavors.length);
for (int i = 0; i < flavors.length; i++){
System.out.println("flavor[" + i + "] = " + flavors[i]);
}
}
});
f.add(button_test, BorderLayout.SOUTH);
}
f.pack();
f.setVisible(true);
}
// ClipboardOwner implementation
@Override
public void lostOwnership(Clipboard clipboard, Transferable transferable){
System.out.println("ClipboardTest: Lost ownership");
}
/* *****************************************************************************************
* Object that I want to copy/paste
* ****************************************************************************************/
public static class MyObject {
private String[] items;
public MyObject(String[] items){
this.setItems(items);
}
public String[] getItems(){
return this.items;
}
public void setItems(String[] items){
this.items = items;
}
}
public static class MyObjectSelection implements Transferable, ClipboardOwner {
private static DataFlavor dmselFlavor = new DataFlavor(MyObject.class, "Test data flavor");
private MyObject selection;
public MyObjectSelection(MyObject selection){
this.selection = selection;
}
// Transferable implementation
@Override
public DataFlavor[] getTransferDataFlavors(){
System.out.println("getTransferDataFlavors");
DataFlavor[] ret = {dmselFlavor};
return ret;
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor){
return dmselFlavor.equals(flavor);
}
@Override
public synchronized Object getTransferData (DataFlavor flavor)
throws UnsupportedFlavorException
{
if (isDataFlavorSupported(flavor)){
return this.selection;
} else {
throw new UnsupportedFlavorException(dmselFlavor);
}
}
// ClipboardOwner implementation
@Override
public void lostOwnership(Clipboard clipboard, Transferable transferable){
System.out.println("MyObjectSelection: Lost ownership");
}
}
}
जल्द से जल्द बेहतर सहायता के लिए, एक [एसएससीसीई] (http://sscce.org/) पोस्ट करें। –
ऑपरेटिंग सिस्टम और JVM के स्टार्टअप तर्क/विन्यास भी वैश्विक क्लिपबोर्ड – tucuxi
@AndrewThompson तक पहुँचने पर कहने के लिए बहुत कुछ है, मैं इसे, मेरे अद्यतन सवाल जाँच गयी। –