当前位置: 首页 > 面试题库 >

Mac OS X上的剪贴板监视| java

韦叶秋
2023-03-14
问题内容

我在从Mac OS X上的系统剪贴板中获取数据时遇到了麻烦。我想做的是,每次将新的[基于文本]的信息放入其中时,都听系统剪贴板并打印剪贴板的内容。

问题:波纹管代码在Windows 7和openSUSE Linux机器上运行良好,但是,当我尝试在Mac OS
X上运行相同的代码时,该程序无法打印剪贴板的新内容,直到将焦点放在应用程序上为止。[在我单击扩展坞上的应用程序图标之前,不会打印任何内容。]

我的源代码:

import java.awt.Toolkit;  
import java.awt.datatransfer.*;  
import java.io.IOException;

public class ClipboardListener extends Thread implements ClipboardOwner {

    Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

    public void run(){  
        Transferable selection = systemClipboard.getContents(this);  
        gainOwnership(selection);  
    }

    public void gainOwnership(Transferable t){ 
        try {this.sleep(100);} 
        catch (InterruptedException e) {e.printStackTrace();}
        systemClipboard.setContents(t, this);  
    }

    public void lostOwnership(Clipboard clipboard, Transferable contents) {
        try {System.out.println((String) clipboard.getData(DataFlavor.stringFlavor));} 
        catch (UnsupportedFlavorException e) {} 
        catch (IOException e) {}
        gainOwnership(contents);  
    }  
}
public class myApp {

    public static void main(String[] args){
        ClipboardListener listener = new ClipboardListener();
        listener.start();
        while(true){}}

}

我想念/做错了什么?

[更新]
我发现这里发布了类似的问题:Java线程不在关注OSX时进入睡眠状态, 但是使用命令“ java -jar
myApp.jar&”对我来说不起作用。


问题答案:

这似乎是一个开放的错误,请参阅MACOSX_PORT-511
ClipboardOwner方法如果应用程序未聚焦,则不会调用lostClipboard。



 类似资料:
  • 在系统剪贴板上执行复制和剪贴操作 进程: 主进程, 渲染进程​ 复制字符串例子: 1 const {clipboard} = require('electron') 2 clipboard.writeText('Example String') Copied! 在X Window系统上,还有一个选择剪贴板。要操作它,你需要传递selection到每个方法: 1 const {clipboard}

  • 在系统剪贴板上执行复制和粘贴操作。 进程: Main, Renderer 下面的示例演示如何将字符串写入剪贴板: const { clipboard } = require('electron') clipboard.writeText('Example String') On Linux, there is also a selection clipboard. To manipulate it

  • 我正在编写一个在剪贴板上运行的程序,我想在启动时备份剪贴板内容,并在完成后恢复它。所以看起来像: 一般来说,它工作正常,但当我从Intellij复制一部分代码并运行程序时,它会抛出: 异常"java.lang.ClassNotFoundException: com/intellij/codeInsight/editorActions/FoldingData"在构建DataFlavor时用于:应用程

  • 问题内容: 有人可以向我解释xwindow剪贴板的机制吗?例如,如果我执行从gedit打开文件的操作,然后使用ctrl + c复制该文件的内容。然后我打开vim并使用ctrl + v将内容粘贴到新打开的文件中。我知道它将使用xwindow的缓冲区存储内容。但是我很好奇它在系统级别上是如何工作的。更具体地说,底层linux内核需要如何处理此复制粘贴操作?是否有与此操作相关的系统调用?谢谢 问题答案:

  • Clipboard对象保存同一应用程序的两个进程或两个小部件之间的共享数据。 gtk.Clipboard是gtk.SelectionData类的高级接口。 以下是gtk.Clipboard构造函数的原型 - gtk.Clipboard(display,selction) 这里,display参数对应于要为其创建或检索剪贴板的gtk.gdk.Display对象。 默认情况下,它是标准输出设备。 s

  • 介绍 在Hutool群友的强烈要求下,在3.2.0+ 中新增了ClipboardUtil这个类用于简化操作剪贴板(当然使用场景被局限)。 使用 ClipboardUtil 封装了几个常用的静态方法: 通用方法 getClipboard 获取系统剪贴板 set 设置内容到剪贴板 get 获取剪贴板内容 针对文本 setStr 设置文本到剪贴板 getStr 从剪贴板获取文本 针对Image对象(图片