Java剪贴板访问10秒挂起

时间:2015-12-17 21:39:31

标签: java linux clipboard x11

当我收到系统剪贴板的内容时,该呼叫很可能会暂停10秒钟。

我碰到了这个,因为我的弹出式菜单创建偶尔会挂起,因为我正在检查剪贴板的状态以启用/禁用粘贴选项。

将它缩小到getSystemClipboard()。getContents()后,我写了一个控制台应用程序,它只是循环并查询它。在Windows下它运行正常,但在Linux和X下,我有很多挂起。

在我的GUI应用程序中,如果有任何UI事件(即鼠标移动),10秒的挂起将被缩短。

我还运行了我的控制台应用程序指向Xvfb(无头X虚拟帧缓冲区),如果只有一个控制台应用程序连接到它,它通常成功,但有一些应用程序的副本点击相同的X显示错误开始发生。

以下是一个示例应用。我想知道这是否会给你带来同样的问题。

public class main {
    public static  void main(String[] args) 
    {
        System.out.println("Clipboard class: " + Toolkit.getDefaultToolkit().getSystemClipboard().getClass() );
        long progstart_ts = System.currentTimeMillis();
        int slowcount = 0;
        int MAXLOOP = 1000;
        for(int i = 0; i < MAXLOOP; i++)
        {
            long start_ts = System.currentTimeMillis();
            Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
            long end_ts = System.currentTimeMillis();
            long elapsed = end_ts - start_ts;

            if ( elapsed > 1000 )
            {
                System.out.println("Loop " + i + ", " + elapsed);
                slowcount++;
            }
        }
        long progend_ts = System.currentTimeMillis();
        long progelapsed = progend_ts - progstart_ts;
        System.out.println("Total time: " + progelapsed);
        System.out.println("Good/bad: " + (MAXLOOP - slowcount) + "/" + slowcount);
    }
}

0 个答案:

没有答案