The application now works for me after changing 2 lines. At least, after Copy of slected text in pane 1 and "Paste", both panes display the text and nothing else - was that the intention? Using jdb, I found that the mime-type of the message was "text/plain; charset=unicode", which Transfer's getTransferData method didn't recognise, therefore returning null. The second problem was that once getTransferData returned a non-null object, the cast of it to StringReader caused a runtime exception. A cast to String is OK however. The changes are appended. Why it worked as-is on the other platforms is another question. -Duncan On Wed, May 13, 1998 at 04:36:24PM +0100, Steve Zara wrote: > 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? > >
*** clipboard.java 1998/05/14 06:17:41 1.1 --- clipboard.java 1998/05/15 02:50:04 *************** *** 58,64 **** try { String result = ""; ! s=(StringReader)data.getTransferData(DataFlavor.plainTextFlavor); try { for (;;) { --- 58,64 ---- try { String result = ""; ! s=new StringReader((String)data.getTransferData(DataFlavor.plainTextFlavor)); try { for (;;) { *************** *** 103,108 **** --- 103,109 ---- public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (flavor.getMimeType().equals("text/insidejava")) return s; + if (flavor.getMimeType().equals("text/plain; charset=unicode")) return s; if (flavor==DataFlavor.stringFlavor) return s; return null; }