Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема Copy/Past windows -> X11 / 13 сообщений из 13, страница 1 из 1
13.01.2014, 19:25
    #38524951
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
Доброго времени суток !

Запускаю свое свинговое приложение под X-ми.

/usr/local/jdk/bin/java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)


При попытке скопировать текстовую строчку в виндовой тулзе (например, в far) и вставить в JTextField получаю:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Failed to retrieve atom name.
	at sun.awt.X11.XlibWrapper.XGetAtomName(Native Method)
	at sun.awt.X11.XAtom.getName(XAtom.java:186)
	at sun.awt.X11.XDataTransferer.getTargetNameForAtom(XDataTransferer.java:166)
	at sun.awt.X11.XDataTransferer.getNativeForFormat(XDataTransferer.java:155)
	at sun.awt.datatransfer.DataTransferer.getFlavorsForFormats(DataTransferer.java:804)
	at sun.awt.datatransfer.ClipboardTransferable.<init>(ClipboardTransferable.java:89)
	at sun.awt.X11.XClipboard.getContents(XClipboard.java:106)
	at javax.swing.TransferHandler$TransferAction.actionPerformedImpl(TransferHandler.java:1747)
	at javax.swing.TransferHandler$TransferAction.access$700(TransferHandler.java:1684)
	at javax.swing.TransferHandler$TransferAction$1.run(TransferHandler.java:1707)
	at javax.swing.TransferHandler$TransferAction$1.run(TransferHandler.java:1705)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at javax.swing.TransferHandler$TransferAction$2.run(TransferHandler.java:1722)
	at javax.swing.TransferHandler$TransferAction$2.run(TransferHandler.java:1720)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at javax.swing.TransferHandler$TransferAction.actionPerformed(TransferHandler.java:1719)
	at javax.swing.text.JTextComponent.invokeAction(JTextComponent.java:1513)
	at javax.swing.text.JTextComponent.paste(JTextComponent.java:1491)
	at javax.swing.text.DefaultEditorKit$PasteAction.actionPerformed(DefaultEditorKit.java:1363)
	at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1664)
	at javax.swing.JComponent.processKeyBinding(JComponent.java:2878)
	at javax.swing.JComponent.processKeyBindings(JComponent.java:2925)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2841)
	at java.awt.Component.processEvent(Component.java:6282)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
	at java.awt.Component.dispatchEventImpl(Component.java:4731)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154)
	at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
	at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219)
	at java.awt.Dialog.show(Dialog.java:1082)
	at java.awt.Component.show(Component.java:1651)
	at java.awt.Component.setVisible(Component.java:1603)
	at java.awt.Window.setVisible(Window.java:1014)
	at java.awt.Dialog.setVisible(Dialog.java:1005)
	at ttk.common.standalone.gui.frame.MainClientFrame.open_Dlg_search_CAO(MainClientFrame.java:556)
	at ttk.common.standalone.gui.frame.MainClientFrame.access$300(MainClientFrame.java:37)
	at ttk.common.standalone.gui.frame.MainClientFrame$9.actionPerformed(MainClientFrame.java:328)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)   



куда копать ???
...
Рейтинг: 0 / 0
13.01.2014, 19:52
    #38524975
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
Подозреваю что копать некуда. Содержимое clipboard это не только текст, то ещё и метаинформация, которая под виндой и X-ами разная. Вот и падает из-за несовместимости.
...
Рейтинг: 0 / 0
13.01.2014, 19:55
    #38524977
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
Здесь немного инфы почему так происходит
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6322854
...
Рейтинг: 0 / 0
14.01.2014, 11:20
    #38525324
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
доп. инфа:

для соединения с удаленным linux используется RDP (X11rdp ).

на стороне linux открываю текстовый файл.
в своей виндовой сессии, например в excel копирую нечто в буфер обмена (ctrl-v)
в удаленной сесии вставляю в текстовый файл (ctrl-c)

все вставляется замечательно !

не работает вставка в моем java-приложении...

может, есть простое решение ?
...
Рейтинг: 0 / 0
14.01.2014, 11:35
    #38525346
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
Igor-65может, есть простое решение ?
Может. Но я не вижу.
Вариантов пока только два
1) KDE
2) Исправить в OpenJDK самому, чтобы вместо ошибки попробовать интерпретировать clipboard как текст.
...
Рейтинг: 0 / 0
14.01.2014, 11:43
    #38525363
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
Там ещё в stderr должно печататься сообщение
fprintf(stderr, "Atom was %d\n", (int)atom);

Не уверен что поможет, некогда сейчас дальше код Java ковырять. Но можно попробовать взять sun.awt.X11.XAtom и зарегать через рефлексию нужный Atom.
...
Рейтинг: 0 / 0
14.01.2014, 13:18
    #38525513
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
есть такое в stderr:

Atom was 0
...
Рейтинг: 0 / 0
14.01.2014, 15:33
    #38525770
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
пофиксил. но может где-то в другом месте всплыть.

в классе XAtom

добавил обработку исключения

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public final String getName()
  {
    if (this.name == null)
    {
      XToolkit.awtLock();
      try
      {
        [color=red]try[/color]
            this.name = XlibWrapper.XGetAtomName(this.display, this.atom);
        [color=red]} catch (Throwable te) {
            this.name = "null";
        }[/color]
      }
      finally
      {
        XToolkit.awtUnlock();
      }
      register();
    }
    return this.name;
  }
...
Рейтинг: 0 / 0
14.01.2014, 15:34
    #38525776
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
неправильно вставил ...
...
Рейтинг: 0 / 0
14.01.2014, 15:37
    #38525780
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
красным - добавленные строчки

public final String getName()
{
if (this.name == null)
{
XToolkit.awtLock();
try
{
try {
this.name = XlibWrapper.XGetAtomName(this.display, this.atom);
} catch (Throwable te) {
this.name = "null";
}
}
finally
{
XToolkit.awtUnlock();
}
register();
}
return this.name;
}
...
Рейтинг: 0 / 0
14.01.2014, 16:12
    #38525853
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
Igor-65,

Так paste совсем не будет работать? Или работает?
...
Рейтинг: 0 / 0
14.01.2014, 16:55
    #38525924
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
работает ....
причем пробовал копировать в JTextField стандартный.
В другом месте был свой код по обработке Past (Копирование группы ячеек exel) - тоже работает.
Единственно, что потребовалось дополнительно сделать - так это более честный обработчик для данных из excel (доп. обработка "пустых" полей). Передаются не совсем так как win->win.
Причем, свое слово "null" я нигде не встретил. Я в конце концов его заменил на "".
...
Рейтинг: 0 / 0
14.01.2014, 17:41
    #38525994
Igor-65
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема Copy/Past windows -> X11
подробно пока не исследовал.
предположение такое:
винда при Copy создает несколько наборов для разных DataFlavor.
мне нужен только DataFlavor.stringFlavor.
если при передаче данных для других DataFlavor что-то не так, то мне наплевать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема Copy/Past windows -> X11 / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]