Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8131686

System clipboard.getData(dataFlavor) throws exception for custom data flavor representationClass

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P4 P4
    • 9
    • 9
    • client-libs
    • None

      Run the following sample:
      ------------------------------
      import java.awt.Toolkit;
      import java.awt.datatransfer.Clipboard;
      import java.awt.datatransfer.DataFlavor;
      import java.awt.datatransfer.SystemFlavorMap;
      import java.io.IOException;
      import java.io.Reader;
      import javax.swing.JLabel;
      import javax.swing.TransferHandler;

      public class ConstructFlavoredObjectTest {

          private static final String TEST_MIME_TYPE = "text/plain;class="
                  + MyStringReader.class.getName();

          public static void main(String[] args) throws Exception {

              final DataFlavor dataFlavor = new DataFlavor(TEST_MIME_TYPE);
              SystemFlavorMap systemFlavorMap = (SystemFlavorMap) SystemFlavorMap.
                      getDefaultFlavorMap();
              systemFlavorMap.addUnencodedNativeForFlavor(dataFlavor, "TEXT");
              systemFlavorMap.addFlavorForUnencodedNative("TEXT", dataFlavor);

              TransferHandler transferHandler = new TransferHandler("Test Handler");

              Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
              transferHandler.exportToClipboard(new JLabel("Test"), clipboard,
                      TransferHandler.COPY);

              Object clipboardData = clipboard.getData(dataFlavor);
              System.out.println("clipboardData: " + clipboardData);
              if (!(clipboardData instanceof MyStringReader)) {
                  throw new RuntimeException("Wrong clipboard data!");
              }
          }

          public static class MyStringReader extends Reader {

              public MyStringReader(Reader reader) {
              }

              @Override
              public int read(char[] cbuf, int off, int len) throws IOException {
                  throw new UnsupportedOperationException("Not supported yet.");
              }

              @Override
              public void close() throws IOException {
                  throw new UnsupportedOperationException("Not supported yet.");
              }
          }
      }
      ------------------------------

      The exception is thrown:
      ------------------------------
      Exception in thread "main" java.lang.InternalError
      at java.lang.invoke.MethodHandleImpl$BindCaller.bindCaller(MethodHandleImpl.java:1144)
      at java.lang.invoke.MethodHandleImpl$BindCaller.bindCaller(MethodHandleImpl.java:1144)
      at java.lang.invoke.MethodHandleImpl.bindCaller(MethodHandleImpl.java:1130)
      at java.lang.invoke.MethodHandles$Lookup.maybeBindCaller(MethodHandles.java:1677)
      at java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1665)
      at java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(MethodHandles.java:1613)
      at java.lang.invoke.MethodHandles$Lookup.getDirectMethodForConstant(MethodHandles.java:1798)
      at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1747)
      at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:399)
      at sun.awt.datatransfer.DataTransferer.constructFlavoredObject(DataTransferer.java:1438)
      at sun.awt.datatransfer.DataTransferer.translateStream(DataTransferer.java:1361)
      at sun.awt.windows.WDataTransferer.translateStream(WDataTransferer.java:237)
      at sun.awt.datatransfer.DataTransferer.translateBytes(DataTransferer.java:1190)
      at sun.awt.windows.WDataTransferer.translateBytes(WDataTransferer.java:285)
      at sun.awt.datatransfer.SunClipboard.getData(SunClipboard.java:230)
      at datatransfer.ConstructFlavoredObjectTest.main(ConstructFlavoredObjectTest.java:59)
      ------------------------------

            alexsch Alexandr Scherbatiy
            alexsch Alexandr Scherbatiy
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: