This example code works fine on Solaris and Win95/NT:


import java.net.*;
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
import java.awt.event.*;

class clipboard extends Frame implements ClipboardOwner{
        TextArea t1=new TextArea("Area 1...",20,20);
        TextArea t2=new TextArea("Area 2...",20,20);
        Button b1=new Button("Copy");
        Button b2=new Button("Paste");
        Panel pA=new Panel();
        Panel pB=new Panel();
        ClipboardOwner owner=this;
        Clipboard Clip=getToolkit ().getSystemClipboard ();
        
        public void lostOwnership(Clipboard b,Transferable c)
        {
                System.out.println("We lost ownership!");
        }
        
        public static void main(String args[])
        {
                clipboard c=new clipboard();
                c.resize(new Dimension(300,300));
                c.show();
        }
        
        clipboard()
        {
                setLayout(new BorderLayout(10,10));
                pA.setLayout(new FlowLayout());
                pB.setLayout(new FlowLayout());
                pA.add("West",t1);
                pA.add("East",t2);
                
                b1.addActionListener( new ActionListener() {
                        
                        public void actionPerformed(ActionEvent e)
                        {
                                Transfer trans=new Transfer(t1.getSelectedText());
                                Clip.setContents(trans,owner);
                        }
                });
                
                
                b2.addActionListener( new ActionListener() {
                        public void actionPerformed(ActionEvent e)
                        {
                                
                                Transferable data=Clip.getContents(this);
                                StringReader s;
                                if (data.isDataFlavorSupported(new 
DataFlavor("text/insidejava","Test on InsideJava")))
                                        System.out.println("Transferable supports 
text/insidejava Mime Type.");
                                
                                if 
(data.isDataFlavorSupported(DataFlavor.stringFlavor))
                                        System.out.println("Transferable supports 
application/x-java-serializedobject Mime Type");
                                try {
                                        
                                        String result = "";
                                        
s=(StringReader)data.getTransferData(DataFlavor.plainTextFlavor);
                                            
                                        try {
                                            for (;;) {
                                                int c = s.read ();
                                                if (c == -1)
                                                    break;

                                                result += (char) c;
                                            }
                                        } catch (Exception ioe) {
                                        }
                                        t2.setText (result);
                                        t1.setText (result);
                                        
                                        
                                }
                                catch (UnsupportedFlavorException ex) 
{System.out.println("Unsupported Flavor!");}
                                catch (IOException ex) 
{System.out.println("IOException!");}
                                
                        }
                });
                
                pB.add(b1);
                pB.add(b2);
                
                add("South",pB);
                add("Center",pA);
        }
}



class Transfer implements Transferable
{
        String s;
        
        public Transfer(String s)
        {       
                this.s=s;
        }
        
        public Object getTransferData(DataFlavor flavor) throws 
UnsupportedFlavorException, IOException
        {
                if (flavor.getMimeType().equals("text/insidejava")) return s;
                if (flavor==DataFlavor.stringFlavor) return s;
                return null;
        }
        
        public boolean isDataFlavorSupported(DataFlavor flavor)
        {
                System.out.println("isDataFlavorSupported Method called with:");
                System.out.println("  Mime Type: "+flavor.getMimeType());
                System.out.println("  Human Name: "+flavor.getHumanPresentableName());
                if (flavor.getMimeType().equals("text/insidejava") 
||flavor==DataFlavor.stringFlavor) return true;
                else return false;
        }
        
        public  DataFlavor[] getTransferDataFlavors() 
        {
                DataFlavor d[]=new DataFlavor[1];
                d[0]=new DataFlavor("text/insidejava","Test on InsideJava");
                d[1]=DataFlavor.stringFlavor;
                return d;
        }
        
}

(This is a severe modification of someone else's example)

The stack trace is:
Exception occurred during event dispatching:
java.lang.NullPointerException: 
        at sun.awt.motif.X11Selection.isDataFlavorSupported(X11Selection.java:223)
        at clipboard$2.actionPerformed(Main.java:53)
        at java.awt.Button.processActionEvent(Button.java:254)
        at java.awt.Button.processEvent(Button.java:227)
        at java.awt.Component.dispatchEventImpl(Component.java:1764)
        at java.awt.Component.dispatchEvent(Component.java:1704)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:63)


I want to complete an application that can accept text from the 
clipboard, so this is a crucial bug for me.

Also, can I join the mailing list?

Reply via email to