在java中如何监视剪贴板?
我实现FlavorListener接口的flavorsChanged 方法,但是我在同一个窗口中连续复制不同的内容却不会触发这个方法,
需要切换到不同的窗口中才可以,比如在netbean中copy不同的东西不会触发,如果切换到IE中copy触发,再在IE中copy又不会触发了.....    1. ..  
   2.   systemClipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard();  
   3.   systemClipboard.addFlavorListener(this);  
   4. ..  
   5. public void flavorsChanged(FlavorEvent e) {  
   6.         try {  
   7.             System.out.println("Clipboard changed");  
   8.             Clipboard clipboard = (Clipboard) e.getSource();  
   9.             Transferable content = clipboard.getContents(this);  
  10.             if (content != null &&content.isDataFlavorSupported(DataFlavor.stringFlavor)) {  
  11.             String data = (String) content.getTransferData(DataFlavor.stringFlavor);  
  12.             System.out.println(data );  
  13.             }  
  14.         } catch (UnsupportedFlavorException ex) {  
  15.             //do nothing  
  16.         } catch (IOException ex) {  
  17.           //do nothing  
  18.         }  
  19.     }  请教这是怎么回事?

解决方案 »

  1.   

    你可以试试使用ClipboardOwner这个接口。 
    覆盖lostOwnership(Clipboard clipboard,Transferable contents)方法。 
    这个接口的“注册”很简单,在调用Clipboard对象的setContents(Transferable,ClipboardOwner)方法时,输入第二个参数就行了。 
    注意:如果你想要一直监视剪贴板就在lostOwnership方法中调用你要监视的剪贴板的setContents方法“注册”自己(指的是ClipboardOwner接口)。 FlavorListenter接口的方法只有在你所复制的内容的风格(DataFlavor)集合变化时才被回调。