2009-12-04 3 views
3

У меня есть JDialog с компонентом JTextArea. В этом диалоговом окне показан пользователь, какие аргументы использовать при запуске программы, чтобы запустить режим, который они только что настроили. У меня есть кнопка в диалоговом окне, чтобы скопировать аргументы в буфер обмена. Это использует метод copy() для объекта JTextArea.JTextArea.copy() буфер сброшен, когда программа завершена

Это прекрасно работает, и буфер обмена содержит правильный текст, пока программа не будет закрыта. Затем буфер обмена теряется. Есть ли в любом случае, чтобы сохранить это после завершения программы? Обычная операция заключалась бы в том, чтобы затем выйти из программы и снова запустить ее с помощью аргументов.

Это может показаться странным, но идея заключается в том, что пользователь установит среду с графическим интерфейсом, а затем запустит ее с помощью аргументов в cron или аналогичных.

+0

Даже если вы получите эту работу, не зависит от того, что пользователь не помещает что-то в буфер обмена после вашей программы, но до того, как ваша программа использует его? Это означает, что пользователь может случайно испортить вашу программу. – TofuBeer

+0

hi @Android Вы нашли решение для своей проблемы? – pratikabu

ответ

0

Я бы предложил использовать вместо этого Preferences API.

+0

Аргумент - это путь к файлу конфигурации, который он должен загрузить. Вполне вероятно, что пользователь установит много из них, поэтому я не могу просто иметь файл по умолчанию, который всегда загружается при запуске. –

+0

, но у вас может быть только один из них в буфер обмена за раз? поэтому, когда они меняют его с помощью кнопки, вы сохраняете его в буфер обмена, а затем программа использует это значение. То, что я предлагаю, это одно и то же: нажмите кнопку и сохраните ее с помощью настроек, затем, когда программа ищет ее, а не смотрит в буфер обмена, она использует Preferences для ее захвата. Те же данные, тот же поток, jsut выглядят в другом месте. – TofuBeer

1

Я только что узнал, что в Java есть два буфера обмена, локальный и системный. Объяснил бы что-то, если бы вы просто взяли локальный буфер обмена.

Here's an example который использует системный буфер обмена. Надеюсь, он решает вашу проблему!

+0

Это работает, но по-прежнему имеет ту же проблему, когда программа закрывается. –

+0

Очень, очень странно - можете ли вы дважды проверить, не случайно ли вы скопировали некоторые пустые или другие объекты в буфер обмена непосредственно перед закрытием приложения, iaw, случайно перезаписав контент? –

+0

Я только что скопировал и скопировал программу по этой ссылке. Буфер обмена очищается при выходе из программы. Добавлен thread.sleep к последней строке, и текст был в буфере обмена до тех пор, пока он не закончится. –

1

Работает отлично для меня, когда я использую Ctrl + C, чтобы скопировать содержимое текстового компонента. Так что попробуйте с помощью прилагаемого Action (который является тем, что использует Ctrl + C), чтобы сделать копию вместо метода копирования():

JButton button = new JButton(DefaultEditorKit.CopyAction()); 
1

Вы можете использовать робота для имитации Ctrl + C

Robot robot = new Robot(); 
robot.keyPress(KeyEvent.VK_CONTROL); 
robot.keyPress(KeyEvent.VK_C); 
robot.keyRelease(KeyEvent.VK_C); 
robot.keyRelease(KeyEvent.VK_CONTROL); 

Это, безусловно, останется в буфере обмена даже после закрытия вашей программы.

Или вы можете попробовать

StringSelection ss = new StringSelection("your text for clipboard"); 
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null); 

, который работает для меня в Windows 7.

+0

Интересно, что в Linux буфер обмена теряется после завершения программы. Даже ручное CTRL-C теряется. –

0

Для меня это достаточно просто:

JButton buttonCopy = new JButton(new DefaultEditorKit.CopyAction()); 
buttonCopy.setText("copy");