Windows 剪贴板 Java 程序不工作

Windows Clipboard Java Programm Does Not Work

public class ClipBoardListener extends Thread implements ClipboardOwner{
    
Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();  


  public void run() {
    Transferable trans = sysClip.getContents(this);  
    TakeOwnership(trans);       
    while(true) {
    }
  }  

    public void lostOwnership(Clipboard c, Transferable t) {  

  try {  
      ClipBoardListener.sleep(250);  //waiting e.g for loading huge elements like word's etc.
  } catch(Exception e) {  
    System.out.println("Exception: " + e);  
  }  
  Transferable contents = sysClip.getContents(this);  
    try {
        process_clipboard(contents, c);
    } catch (Exception ex) {
        Logger.getLogger(ClipBoardListener.class.getName()).log(Level.SEVERE, null, ex);
    }
  TakeOwnership(contents);


}  

  void TakeOwnership(Transferable t) {  
    sysClip.setContents(t, this);  
  }  

public void process_clipboard(Transferable t, Clipboard c) { //your implementation
    String tempText;
    Transferable trans = t;

    try {
        if (trans != null?trans.isDataFlavorSupported(DataFlavor.stringFlavor):false) {
            tempText = (String) trans.getTransferData(DataFlavor.stringFlavor);
            
           addStringToClipBoard(tempText);
            
           
        }

    } catch (Exception e) {
    }
}
public static void addStringToClipBoard(String cache) {                         
    StringSelection selection = new StringSelection(cache.trim());
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents(selection,null);
}


public static void main(String[] args) {
    
    ClipBoardListener c = new ClipBoardListener();
    c.start();
        
 }  
}

德语翻译:

你好,我试着写了一个程序,我可以用它来编辑 Windows 剪贴板。我想要插入的时候前后空格都没有了

我就是这样实现的。但是没用。

示例:我复制这个字符串“Hello World”并插入“Hello World”。

有人知道吗? 谢谢

德语翻译:

你好我试着写了一个程序来编辑Windows的剪贴板。我想让插入的时候前后空格都没有

我是这样实现的。但是没用。

示例:复制此字符串“Hello World”并粘贴“Hello World”。

有人知道吗? 谢谢

注释掉 lostOwnership() 中的 TakeOwnership 行。它会重置您刚刚在前面的 process_clipboard 调用中更改的原始剪贴板内容。

//TakeOwnership(contents);

并使其成为非静态的/使用“this”:

public void addStringToClipBoard(String cache) {
  StringSelection selection = new StringSelection(cache.trim());
  Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
  clipboard.setContents(selection,this);
}

在此示例中,您的 class 不必是 Thread,因为您可以直接在 main 中调用 c.run()。具有紧密 CPU 循环 while(true) {} 的方法不是一个好主意 - 等待一些退出条件。