从剪贴板Awt与FX获取图像

cru*_*sam 5 java clipboard javafx image awt

最近,我们的Java-FX应用程序无法再从剪贴板读取图像。例如,用户选择Microsoft-Paint中的Image的一部分,然后按copy。我不是在谈论复制的图像文件,那些文件工作正常。

我很确定它过去已经可以使用,但是我仍然需要验证一下。尽管如此,我还是创建了一个小示例,并将AWT与FX剪贴板进行了比较以重现该行为:

在此处输入图片说明

public class ClipBoardFxApp extends Application
{
  @Override
  public void start( final Stage primaryStage )
  {
      final BorderPane root = new BorderPane();
      final ImageView view = new ImageView();

      final Button awtButton = new Button( "AWT" );
      awtButton.setOnAction( event -> loadImageFromAwtClipboard( view ) );

      final Button javaFXButton = new Button( "JavaFX" );
      javaFXButton.setOnAction( event -> loadImageFromJavaFXClipboard( view ) );

      root.setCenter( view );

      final BorderPane buttonPane = new BorderPane();
      buttonPane.setLeft( awtButton );
      buttonPane.setRight( javaFXButton );
      root.setBottom( buttonPane );

      final Scene scene = new Scene( root, 400, 400 );
      primaryStage.setScene( scene );
      primaryStage.show();
  }

  private void loadImageFromJavaFXClipboard( final ImageView view )
  {
    System.out.println( "FX-Clipboard: Try to add Image from Clipboard..." );
    final Clipboard clipboard = Clipboard.getSystemClipboard();

    if ( clipboard.hasImage() )
    {
      final Image image = clipboard.getImage();
      view.setImage( image );
    }
    else
    {
      new Alert( AlertType.INFORMATION, "No Image detected im Clipboard!" ).show();
    }
  }

  private void loadImageFromAwtClipboard( final ImageView view )
  {
    System.out.println( "AWT-Clipboard: Try to add Image from Clipboard..." );

    try
    {
      final Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents( null );

      if ( t != null && t.isDataFlavorSupported( DataFlavor.imageFlavor ) )
      {
        final java.awt.image.BufferedImage img = (java.awt.image.BufferedImage) t.getTransferData( DataFlavor.imageFlavor );

        final Image image = SwingFXUtils.toFXImage( img, null );

        view.setImage( image );
      }
      else
      {
        new Alert( AlertType.INFORMATION, "No Image detected im Clipboard!" ).show();
      }
    }
    catch ( final UnsupportedFlavorException | IOException e )
    {
      e.printStackTrace();
    }
  }

  public static void main( final String[] args )
  {
    launch( args );
  }
}
Run Code Online (Sandbox Code Playgroud)

AWT剪贴板按预期工作,而Java-FX剪贴板仅显示具有正确图像尺寸的白色图像,但没有内容。我希望保留FX方式,因此对此有任何解决方案或任何解释,我在这里可能做错了什么?