2016-06-27 51 views
1

我有一個程序,它打開一個程序,然後它將一個字符串複製並粘貼到程序中,並在一段時間後使用ctrl + c使用機器人將程序中的字符串複製到剪貼板。然後我的程序檢查複製的字符串是否包含一個單詞,但不檢查最近複製的字符串,而是使用之前複製的字符串開頭。下面是一些代碼:java剪貼板錯誤(bug)?

new ProcessBuilder("pathToProgram").start(); 
copy(STRING1); 
paste(); 
Thread.sleep(x); 
//Move mouse to a position 
//robot uses ctrl+a 
copy(); 
Thread.sleep(100); 
clipboardData = (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor); 
system.out.println(clipboardData); 
if(clipboardData.contains(String2){ 
//do some stuff 
} 

system.out只輸出String1的值而不是值string2。謝謝你的幫助。

回答

1

假設您的copy()方法設置了剪貼板文本,我遇到了完全相同的問題並找到了一個奇怪的解決方法。

Java clipboard ignores user copy if not SwingUtilities.invokeLater()

我能得到剪貼板中的文本,這將始終顯示無論用戶在任何時間複製那裏。但是,如果我以編程方式設置剪貼板文本,那麼以後這就是我從剪貼板獲得的所有內容 - 除非我一次推遲通過SwingUtilities.invokeLater()獲取剪貼板文本,否則剪貼板文本再次正常工作。然後,我可以再次打破它 - 然後再「修復」它。

我不知道爲什麼這樣,因此我剛剛發佈的問題(請參閱鏈接)。