Si has llegado a esta página, muy probablemente vengas porque has acabado haciendo alguna de estas 2 opciones.
-
Has pegado en algún destino el texto sin querer 'Process finished with exit code 0'.
-
Has configurado la consola de tu IDE para aumentar el límite del buffer y poder copiar todo el contenido cuando termina tu programa.
Puedes evitar esos 2 problemas con una única línea de código.
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection("String a copiar"), null);
Es una línea algo larga, así que vayamos por partes.
Toolkit.getDefaultToolkit().getSystemClipboard();
Esta primera línea se encarga de obtener el portapales del sistema, y solo va a funcionar en sistemas que no se ejecuten en modo headless, por ejemplo es algo que no podemos ejecutar en un servidor.
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection("String a copiar"), null);
setContents se encarga de establecer el valor del portapaples y ha de ser un objeto de tipo Transferable, el más habitual es el StringSelection, pero nadie nos impide por ejemplo hacer un Transferable para imágenes. El segundo parámetro es para indicar el ownership del portapapeles y notificarnos de ello cuando dicho ownerhip cambia, para nuestro caso podemos omitirlo pasándole null.
Cómo Leer del Portapapeles
Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
DataFlavor dataFlavor = DataFlavor.stringFlavor;
if (systemClipboard.isDataFlavorAvailable(dataFlavor)) {
if (systemClipboard.getData(dataFlavor) instanceof String text) {
System.out.println(text);
}
}
Leer resulta también sencillo, simplemente tenemos que asegurarnos de que vamos a leer un string, para ello elegimos el DataFlavor de tipo string y vemos si está disponible, de esa forma podemos hacer un cast a los datos del método get data.