2010-08-28 3 views
58

Я хочу установить буфер обмена пользователя в строку в консольном приложении Java. Есть идеи?Копирование в буфер обмена в Java

+0

Я пробовал использовать AWT безрезультатно. – clone1018

+1

затем показать, что вы пробовали, и сообщить нам, что именно не сработало – unbeli

ответ

109

Используйте Toolkit, чтобы получить system clipboard. Создайте StringSelection со строкой и добавьте ее в буфер обмена.

упрощенный:

StringSelection selection = new StringSelection(theString); 
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    clipboard.setContents(selection, selection); 
30

Вот простой SSCCE для достижения этой цели:

import java.awt.*; 
import java.awt.datatransfer.*; 
import java.io.*; 

class ClipboardTest 
{ 
    public static void main(String[] args) 
     throws UnsupportedFlavorException, IOException 
    { 
     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); 
     StringSelection testData; 

     // Add some test data 

     if (args.length > 0) 
      testData = new StringSelection(args[0]); 
     else 
      testData = new StringSelection("Test Data"); 

     c.setContents(testData, testData); 

     // Get clipboard contents, as a String 

     Transferable t = c.getContents(null); 

     if (t.isDataFlavorSupported(DataFlavor.stringFlavor)) 
     { 
      Object o = t.getTransferData(DataFlavor.stringFlavor); 
      String data = (String)t.getTransferData(DataFlavor.stringFlavor); 
      System.out.println("Clipboard contents: " + data); 
     } 

     System.exit(0); 
    } 
} 
3

Если вы находитесь на Linux и с помощью OpenJDK, он не будет работать. Вы должны использовать Sun JDK для Linux, чтобы он работал.

+3

Почему? есть ли у вас больше информации об этом? Сообщение об ошибке? Вы могли бы получить некоторую репутацию;) http://stackoverflow.com/q/14242719/194609 – Karussell

+0

Что не получится? Это ответ на один из других ответов? –

-4

Эта работа как чемпион;

String get= text.getText(); 
    StringSelection selec= new StringSelection(get); 
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 
    clipboard.setContents(selec, selec); 
+5

Это точно так же, как Карлос написал 5 лет назад – fishinear

1

В Linux с Xclip:

Runtime run = Runtime.getRuntime(); 
Process p = null; 
String str = "hello"; 
try { 
     p = run.exec(new String[]{"sh", "-c", "echo " + str + " | xclip -selection clipboard"}); 
} 
catch (Exception e) { 
    System.out.println(e); 
} 
+0

Что делать, если строка содержит символы конца строки? Будет ли это работать? –

1

Для тех, кто все еще спотыкаясь на этот пост, ищущей JavaFX способом для достижения этой цели, здесь вы идете:

ClipboardContent content = new ClipboardContent(); 
content.putString("Some text"); 
content.putHtml("<b>Bold</b> text"); 
Clipboard.getSystemClipboard().setContent(content); 

Для получения дополнительной информации, read the documentation.

Смежные вопросы