Java剪贴板访问10秒挂起
当我得到系统剪贴板的内容时,调用很可能会挂起整整10秒钟 我遇到这种情况是因为我的弹出菜单创建偶尔会挂起,因为我正在检查剪贴板的状态以启用/禁用粘贴选项 在将范围缩小到getSystemClipboard().getContents()之后,我编写了一个控制台应用程序,它只是循环和查询它。在windows下运行良好,但在Linux和X下,我会遇到很多挂起 在我的GUI应用程序中,如果有任何UI事件(即鼠标移动),10秒的挂起时间将缩短 我还运行了指向Xvfb(headless X virtual frame buffer)的控制台应用程序,如果只有一个控制台应用程序连接到剪贴板,它通常会成功,但是如果有几个应用程序的副本命中同一个X,那么错误就会开始发生 下面是一个示例应用程序。我想知道你是否也有同样的问题Java剪贴板访问10秒挂起,java,linux,clipboard,x11,Java,Linux,Clipboard,X11,当我得到系统剪贴板的内容时,调用很可能会挂起整整10秒钟 我遇到这种情况是因为我的弹出菜单创建偶尔会挂起,因为我正在检查剪贴板的状态以启用/禁用粘贴选项 在将范围缩小到getSystemClipboard().getContents()之后,我编写了一个控制台应用程序,它只是循环和查询它。在windows下运行良好,但在Linux和X下,我会遇到很多挂起 在我的GUI应用程序中,如果有任何UI事件(即鼠标移动),10秒的挂起时间将缩短 我还运行了指向Xvfb(headless X virtual
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);
}
}
公共类主{
公共静态void main(字符串[]args)
{
System.out.println(“剪贴板类:+Toolkit.getDefaultToolkit().getSystemClipboard().getClass());
long progstart_ts=System.currentTimeMillis();
int-slowcount=0;
int MAXLOOP=1000;
对于(int i=0;i1000)
{
System.out.println(“循环”+i+,“+appead”);
慢计数++;
}
}
long progend_ts=System.currentTimeMillis();
长时间运行=程序结束\u ts-程序开始\u ts;
System.out.println(“总时间:+progrased”);
System.out.println(“好/坏:”+(MAXLOOP-slowcount)+“/”+slowcount);
}
}
我怀疑与此有关。他们声称这是固定的,但挂起期间的线程转储表明AWT事件线程实际上在方法XSelection.waitForSelectionNotify.My分析中等待锁。我的分析导致相同的方法XSelection.waitForSelectionNotify。网站上说它固定在8u60和9b70中。我在8U112上发现了实际的bug,由于测试人员不称职,它没有修复就关闭了==