In Java why do I get java.lang.IllegalStateException: cannot open system clipboard ?
This was running on Windows using Java 1.8.0_181 25.181-b13
java.lang.IllegalStateException: cannot open system clipboard at sun.awt.windows.WClipboard.openClipboard(Native Method) at sun.awt.datatransfer.SunClipboard.getClipboardFormatsOpenClose(SunClipboard.java:327) at sun.awt.datatransfer.SunClipboard.isDataFlavorAvailable(SunClipboard.java:188) at com.jthink.songkong.ui.startdialog.editsongs.EditSongsTable$PasteAction$1.flavorsChanged(EditSongsTable.java:170) at sun.awt.datatransfer.SunClipboard$1SunFlavorChangeNotifier.run(SunClipboard.java:441) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)PasteAction methods is
public PasteAction(JTable tbl) { putValue(NAME, TextLabel.PASTEBUTTON.getMsg()); putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_V, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); table = tbl; final Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); cb.addFlavorListener(new FlavorListener() { @Override public void flavorsChanged(FlavorEvent e) { try { setEnabled(cb.isDataFlavorAvailable(CellTransferable.CELL_DATA_FLAVOR) || cb.isDataFlavorAvailable(DataFlavor.stringFlavor)); } catch(IllegalArgumentException iae) { MainWindow.logger.log(Level.SEVERE, iae.getMessage(), iae); } } }); setEnabled(cb.isDataFlavorAvailable(CellTransferable.CELL_DATA_FLAVOR) || cb.isDataFlavorAvailable(DataFlavor.stringFlavor)); } 1 Answer
This happens when the Java app is notified that it has lost ownership, so it sometimes needs to allow a small amount of time for the clipboard to be "ready." By adding a very short sleep command to the method, we will be able to avoid the runtime exceptions. Please go to below link for more information
1