如何在获取剪辑内容之前确定当前剪贴板DataFlavor

时间:2016-09-14 14:37:31

标签: java groovy

当我复制Intellij Idea Editor文本并运行

时,我遇到了麻烦
Toolkit.defaultToolkit.systemClipboard.getData(DataFlavor.stringFlavor)

它会提出:

Exception "java.lang.ClassNotFoundException: com/intellij/codeInsight/editorActions/FoldingData"while constructing DataFlavor for: application/x-java-jvm-local-objectref; class=com.intellij.codeInsight.editorActions.FoldingData

实际上,我希望忽略剪辑内容与FoldingData,如何检测当前剪贴板DataFlavor

2 个答案:

答案 0 :(得分:0)

剪贴板数据可能有多种口味。因此,您应该使用Clipboard.getAvailableDataFlavors()并遍历数组以确定您要查找的DataFlavor是否存在。

请参阅http://docs.oracle.com/javase/7/docs/api/java/awt/datatransfer/Clipboard.html#getAvailableDataFlavors()

但是如果你得到ClassNotFoundException,这意味着你的运行时类路径缺少依赖项,所以你需要修复这个

答案 1 :(得分:0)

这样您可以提前检查 DataFlavor 以避免 UnsupportedFlavorException 以后

public class ClipBoard { 
    public static void main(String args[]) { 
        Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); 
        try { 
            if (t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor)) { 
                String text = (String)t.getTransferData(DataFlavor.stringFlavor); 
                text=text.toUpperCase(); 
                StringSelection ss = new StringSelection(text); 
                Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); 
            }
        } catch (Exception ex) { 
            ex.printStackTrace();
        } 
    } 
}

了解详情:http://mrbool.com/manipulating-clipboard-content-with-java/24758#ixzz4tta4bwNQ