代码如下FlavorListener f = new FlavorListener(){ @Override
public void flavorsChanged(FlavorEvent e) {
   
   
// 获得系统剪切板内容
Transferable contents = clipboard.getContents(null);
ClipBoard.this.lostOwnership(clipboard, contents);

// 如果非空且为字符串
if (contents != null
&& contents.isDataFlavorSupported(DataFlavor.stringFlavor)) {
try {
// 把内容转换为字符串
String string = (String) contents 
.getTransferData(DataFlavor.stringFlavor);
System.out.println(string);
//检测复制的内容是否是以Http开头
if(string.startsWith("http")||string.startsWith("HTTP")){

System.out.println(string + "?????????");
///获得选择的文本化对象
//打开新建窗口
NewTaskFrame newTaskFrame = mainFrame.getNewTaskFrame();
newTaskFrame.setVisible(true);
//把复制的url放入新建窗口
newTaskFrame.getAddress().setText(string);

     }


} catch (Exception ex) {
ex.printStackTrace();
}
}// end if
}

};
clipboard.addFlavorListener(f);
     我想要的实现的功能就是如果系统剪切板的内容发生变化会得到相应的通知,比如先在一个文本中复制一段文字,然后有在另一端文本中选择并复制了一段文字,通过调用flavorsChanged(FlavorEvent e)方法来实现相关的逻辑。
  但是这个代码好像有些问题:比如,我现在浏览器中随便复制了一段内容,(没有进行粘贴操作) ,然后在word里面又复制了一段内容,这样剪切板的内容就发生了变化,就会调用flavorsChanged(FlavorEvent )方法;问题是,如果我在同一个word里面先复制一段文字,然后在复制另一段文字的时候,这个方法就不会调用了,在同一个浏览器中进行两次右键复制操作也不会调用。这是什么情况? 
   网上搜了好多信息,得不到解决,整了半天了java Clipboard 复制 粘贴

解决方案 »

  1.   

    public String getURL(){
    // 获得系统剪切板内容
    Transferable contents = clipboard.getContents(null);
    String url = null;
    // 如果非空且为字符串
    if (contents != null
    && contents.isDataFlavorSupported(DataFlavor.stringFlavor)) {
    try {
    // 把内容转换为字符串
    url = (String) contents 
    .getTransferData(DataFlavor.stringFlavor);
    if(isURL(url)){
    return url;
    }

    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }// end if
    clipboard.setContents(null, null);
    return null;
    }还有这段代码 每当我添加clipboard.setContents(null,null)时就会报空指针错误,怎么回事呢