Windows剪贴板Java程序不工作[已关闭]

qncylg1j  于 2023-01-27  发布在  Windows
关注(0)|答案(1)|浏览(160)

十小时前关门了。
Improve this question
我想编辑Windows剪贴板的内容,以便在插入文本时删除开头和结尾的空白。
例如,如果我复制文本"Hello World",它应该插入"Hello World"。
我试了这个代码:

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();
        
 }  
}

但它不工作。我该怎么解决这个问题?

g52tjvyc

g52tjvyc1#

注解掉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);
}

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

相关问题