[英]Can't copy to a clipboard from a background java application on MAC OSX
[英]Can't monitor system clipboard changes from a background java application on Mac OS X
我有一个Java程序,该程序在后台运行并监视系统剪贴板中的更改(我通过轮询来执行此操作,因为这似乎是“所有权变量”之外的唯一方法,在该方法中,我必须重置所有内容成为所有者的时间)。 如果它发现特定格式的输入文本,它将处理该文本并用结果覆盖剪贴板(以便我可以复制输入,并在程序在后台运行时将结果粘贴后立即复制)。
到目前为止,这在Windows上运行良好,但是在Mac OS X上运行相同的程序时,其行为有点奇怪。 只要我不将结果复制到系统剪贴板中,轮询机制本身就会按预期工作。 但是目前我第一次将剪贴板内容设置为Java程序之外,它只能在激活时识别将来的外部更改。 因此,我不能只让它在后台运行,而是必须一直“复制输入->切换到Java程序->切换回->粘贴结果”。
由于这很烦人,而这正是我要通过“剪贴板监视->结果粘贴”方法避免的事情,对于解决该问题的任何想法,我都会非常高兴。
编辑:一些代码碎片
public void setClipboardText(String text) {
if (text == null) {
throw new NullPointerException();
}
synchronized (this.lastFoundTextLock) {
this.lastFoundText = text;
Toolkit.getDefaultToolkit().getSystemClipboard()
.setContents(new StringSelection(text), null);
}
}
public String getClipboardText() {
Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().
getContents(null);
try {
if (t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor)) {
String text = (String) t.getTransferData(DataFlavor.stringFlavor);
return text;
}
} catch (UnsupportedFlavorException e) {
} catch (IOException e) {
}
return null;
}
public void run() {
while (true) {
String currentClipboardText = getClipboardText();
boolean isNew;
synchronized (this.lastFoundTextLock) {
isNew = ((this.lastFoundText != null) || (currentClipboardText != null))
&& ((currentClipboardText == null) || !currentClipboardText
.equals(this.lastFoundText));
if (isNew) {
this.lastFoundText = currentClipboardText;
}
}
if (isNew && currentClipboardText != null) {
//new text found
fireNewClipboardTextFound(currentClipboardText);
}
try {
Thread.sleep(this.automaticCheckInterval);
} catch (InterruptedException e) {
// ignore
}
synchronized (this.monitorRunningLock) {
if (!this.monitorRunning) {
break;
}
}
}
}
我看到其他一些人尝试了您要尝试的内容( 无法从MAC OSX上的后台Java应用程序 复制到剪贴板 ),并获得了一定的成功( Java中的“复制到剪贴板” ),很少有好的答案( java / swing:剪贴板)粘贴 ),但您可能需要进一步调查...在此问题上,其他任何人都可以对Java 6中的更改发表评论吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.