Как отлаживать Java UNO в LibreOffice? - PullRequest
0 голосов
/ 11 мая 2018

Я пару дней изучал эту тему и написал простой компонент UNO для работы с электронной таблицей. Основная проблема, с которой я столкнулся во время этого процесса, заключается в том, что всякий раз, когда LO не может найти класс (т. Е. Какой-то требуемый jar не включен в пакет oxt), поток умирает абсолютно бесшумно, не вызывая каких-либо исключений. Единственный способ выяснить это - пошагово отследить весь подозрительный код, который разочаровывает и отнимает много времени. Только тогда я смогу увидеть текст сообщения об исключении и само создание исключения. К сожалению, это исключение никогда не возникает в той среде, в которой я нахожусь, или каким-то образом заглушается.

Есть ли способ включить LO для выдачи исключений / просмотра трассировки стека в целях отладки? Есть ли место, где LP помещает вывод консоли Java? Любая помощь очень ценится!

1 Ответ

0 голосов
/ 11 мая 2018

Если вы еще этого не сделали, я рекомендую заставить работать BookmarkInsertion . Убедитесь, что приложение может найти основные 4 банок в classpath: juh.jar, jurt, jar, ridl, jar, unoil.jar.

Запускаете ли вы компонент из Java IDE, например, NetBeans? Обычно об ошибках сборки и исключениях сообщается в соответствующем окне вывода в нижней части среды IDE, и именно здесь также выводятся данные консоли java.

В противном случае, если вы уже установили OXT-файл в LibreOffice и запускаете его без Java IDE, консольный вывод не отображается. В этом случае вы можете захотеть войти в файл с чем-то вроде log4j. Тем не менее, сообщения об ошибках все еще могут появляться в окне сообщений, в зависимости от ошибки.

EDIT

Для примера в Eclipse я следовал инструкциям на https://github.com/LibreOffice/loeclipse. Чтобы показать сообщения:

  • Окно -> Показать представление -> Консоль
  • Окно -> Показать представление -> Журнал ошибок

Когда я переименовал jurt.jar в jurt0.jar, чтобы его нельзя было найти, на панели консоли было показано следующее.

Exception in thread "Thread-8" java.lang.ClassNotFoundException:
com.sun.star.comp.loader.JavaLoader
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)

System.err.println также записывает данные на панель консоли. Я изменил ActionOneDialog.java следующим образом.

public void show() {
    System.err.println("show() BEGIN");
    dialog.execute();
    System.err.println("show() END");
}
...