问题描述
不是在自己的程序中监听剪贴板的变化 而是系统的使用中发生了剪切复制这类操作Java怎么监听 ? 需要JNI? 还是开个线程每一秒都做一次对比么 ...... 但是这样的话开销就不小了 请大家赐教 问题补充:AngelAndAngel 写道
解决方案
不然要是有这种软件 就天下打乱了。你做什么都可能监听到,那就完咯 呵呵。
解决方案二:
哦 这个东西不能办到,而且是不可能办到的。 而且操作系统是不可能让你这么干的 呵呵 相信我吧兄弟。
解决方案三:
还有 你是用的swing吧。
解决方案四:
看下面代码,ctrl+c /ctrl+v 也可以,你就在复制的时候做你监听的额外工作,比如代码import java.awt.BorderLayout;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.awt.event.ActionEvent;import javax.swing.JButton;import javax.swing.JPanel;import javax.swing.JFrame;import javax.swing.JTextArea;public class MainFrame extends JFrame { private JPanel jContentPane = null; private JTextArea jTextArea = null; private JPanel jPanel = null; private JButton jButton=new JButton(); private JButton jButton1=new JButton(); Clipboard cd=Toolkit.getDefaultToolkit().getSystemClipboard(); /** * This is the default constructor */ public MainFrame() { super(); initialize(); } /** * This method initializes this * * @return void */ private void initialize() { jButton.setText("COPY"); jButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { jb_actionPerformed(e); } }); jButton1.setText("PASTE"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { jb1_actionPerformed(e); } }); this.setSize(300, 200); this.setContentPane(getJContentPane()); this.setTitle(""HAIT'S CODE""); } protected void jb1_actionPerformed(ActionEvent e) { // TODO Auto-generated method stub try{ Transferable tr=cd.getContents(this); if(tr!=null){ String s=(String)tr.getTransferData(DataFlavor.stringFlavor); if(s!=null) this.jTextArea.insert(s,this.jTextArea.getCaretPosition()); } }catch(Exception err){ err.printStackTrace(); } } protected void jb_actionPerformed(ActionEvent e) { StringSelection ss=new StringSelection(this.jTextArea.getText()); cd.setContents(ss,ss); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getJTextArea(), java.awt.BorderLayout.CENTER); jContentPane.add(getJPanel(), java.awt.BorderLayout.SOUTH); } return jContentPane; } /** * This method initializes jTextArea * * @return javax.swing.JTextArea */ private JTextArea getJTextArea() { if (jTextArea == null) { jTextArea = new JTextArea(); } return jTextArea; } /** * This method initializes jPanel * * @return javax.swing.JPanel */ private JPanel getJPanel() { if (jPanel == null) { jPanel = new JPanel(); jPanel.add(jButton, null); jPanel.add(jButton1, null); } return jPanel; }}
解决方案五:
另外,在CSDN有这么个帖子,你可以参考一下:http://topic.csdn.net/u/20101201/11/cf2d6c26-9e87-4bb9-ad5a-ba899c1e3394.html
解决方案六:
刚才那个没编辑好。引用systemClipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); 获得系统剪贴板对象
解决方案七:
systemClipboard = java.awt.Toolkit.getDefaultToolkit().getSystemClipboard(); /quote]获得系统剪贴板对象
解决方案八:
JAVA 应该可以获取 系统 剪贴板的,你说的JNI应该由JAVA帮你封装实现了,你可以看看:引用你可以试试使用ClipboardOwner这个接口。 覆盖lostOwnership(Clipboard clipboard,Transferable contents)方法。 这个接口的“注册”很简单,在调用Clipboard对象的setContents(Transferable,ClipboardOwner)方法时,输入第二个参数就行了。 注意:如果你想要一直监视剪贴板就在lostOwnership方法中调用你要监视的剪贴板的setContents方法“注册”自己(指的是ClipboardOwner接口)。 FlavorListenter接口的方法只有在你所复制的内容的风格(DataFlavor)集合变化时才被回调。