我正在尝试通过docker在无头linux系统上运行一些硒箱,其中“用户”单击将文本复制到系统剪贴板的按钮。运行此代码时,出现错误消息“未设置X11 DISPLAY变量,但该程序执行了需要它的操作”。 我现在正在运行使用xvfb来解决缺少X11 Display变量的情况,但是代码仍然无法正常工作。现在,尝试访问系统剪贴板的内容时出现了空指针。
这是我用来获取复制文本的代码。
String copied = null;
try {
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
Transferable transferable = clipboard.getContents(null);
DataFlavor[] availableFlavors = clipboard.getAvailableDataFlavors();
if ( transferable != null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor) ) {
copied = (String)transferable.getTransferData(DataFlavor.stringFlavor);
} else {
System.out.println("Could not find a suitable flavor.");
if ( transferable.getTransferDataFlavors().length == 0 ) {
System.out.println("no supported flavors");
}
for ( DataFlavor availableFlav : availableFlavors ) {
System.out.println("availableFlav = " + availableFlav);
}
for ( DataFlavor flavaflav : transferable.getTransferDataFlavors() ) {
System.out.println("transferDataFlavor = " + flavaflav);
}
}
// I am not sure what could cause the below exceptions to happen, but we should just fail the case if they occur.
} catch (IOException e) {
e.printStackTrace();
fail("IOException while fetching copied text.");
} catch (UnsupportedFlavorException e) {
e.printStackTrace();
fail("UnsupportedFlavorException while fetching copied text.");
}
return copied;
使用xvfb运行此代码将得到以下输出:
Could not find a suitable flavor.
no supported flavors
然后抛出NullPointerException。
有没有办法伪造实际上可以在此无头linux服务器上工作的系统剪贴板? 是什么原因导致在xvfb中运行的系统剪贴板什么也没复制?