如何在Java中清除系统剪贴板?

Sen*_*rJD 4 java clipboard

如何System Clipboard在Java中清除?我试过了

Toolkit.getDefaultToolkit().getSystemClipboard().setContents(null, null);
Run Code Online (Sandbox Code Playgroud)

但它只是扔了一个NPE:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: contents
    at sun.awt.datatransfer.SunClipboard.setContents(SunClipboard.java:98)
Run Code Online (Sandbox Code Playgroud)

Joe*_*oey 9

您可以创建一个Transferable明确不包含任何数据的特殊内容,如本博客文章中所述:

  clipboard.setContents(new Transferable() {
    public DataFlavor[] getTransferDataFlavors() {
      return new DataFlavor[0];
    }

    public boolean isDataFlavorSupported(DataFlavor flavor) {
      return false;
    }

    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
      throw new UnsupportedFlavorException(flavor);
    }
Run Code Online (Sandbox Code Playgroud)


Tal*_*ala 6

你可以这样做:

StringSelection stringSelection = new StringSelection("");
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
            stringSelection, null);
Run Code Online (Sandbox Code Playgroud)

自从 StringSelection implements Transferable

public class StringSelection implements Transferable, ClipboardOwner
Run Code Online (Sandbox Code Playgroud)

  • @Joey 好吧,重要的问题是这是否具有预期的效果。就像,如果您不能将剪贴板内容设置为空,那么“干净”剪贴板的剪贴板内容是什么?(可能在系统重新启动后。) (2认同)
  • @Joey 我理解其中的区别,我只是说这样的 hack 不一定是无效的解决方案。即对结果剪贴板状态的要求可能不是“没有任何类型的数据可用”,而是“不可能检索以前可用的数据”。假设您正在实施密码管理器并且这是一项安全功能,那么两者都可以正常工作。 (2认同)