- 已关闭**。此问题需要details or clarity。当前不接受答案。
- 想要改进此问题?**添加详细信息并通过editing this post阐明问题。
十小时前关门了。
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();
}
}
但它不工作。我该怎么解决这个问题?
1条答案
按热度按时间g52tjvyc1#
注解掉
lostOwnership()
中的TakeOwnership
行,它将重置您刚刚在前面的process_clipboard
调用中更改的原始剪贴板内容。并将此设置为非静态/使用“this”:
在这个例子中,你的类不需要是
Thread
,因为你可以直接在main
中调用c.run()
。具有紧密CPU循环while(true) {}
的方法不是一个好主意-等待一些退出条件。