Получил UndeclaredThrowableException в com.sun.proxy.$Proxy10.Open при попытке открыть книгу Excel

У меня есть функция в плагине, которая экспортирует некоторые элементы контрольного списка в файл Excel. Раньше все работало нормально, но несколько дней назад я получил ошибку $Proxy10.Open() при попытке открыть книгу Excel. Я не знаю, актуальна ли эта информация, но я могу воспроизвести эту проблему только на нескольких компьютерах, на некоторых из них я могу воспроизвести ее, только если я подключаюсь к ней удаленно.

Ошибка:

    java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy10.Open(Unknown Source)
    Caused by: java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at com.sun.jna.platform.win32.COM.util.ComThread.execute(ComThread.java:157)
at com.sun.jna.platform.win32.COM.util.Factory$ProxyObject2.invoke(Factory.java:93)
... 5 more

Вот как я инициализирую подсистему COM:

Ole32.INSTANCE.CoInitializeEx(Pointer.NULL, Ole32.COINIT_MULTITHREADED);
facade.comFactory = new Factory();

Вот как я инициализирую приложение Excel:

ComExcel_Application excel = facade.comFactory.createObject(ComExcel_Application.class);
facade.excelApp = excel.queryInterface(Application.class);
facade.excelApp.setVisible(true);
System.out.println("Using Excel version: " + facade.excelApp.getVersion());

И здесь выбрасывается исключение:

Workbook myWorkbook = excelApp.getWorkbooks().Open(fullName.toString());

Я хочу спросить, в чем основная проблема этой ошибки, и любые подсказки приветствуются. Я пытался найти любые связанные вопросы или ошибки, но ничего не нашел.

Добро пожаловать в Stack Overflow вы должны прочитать Как задать хороший вопрос?, а затем отредактировать свой пост

Butiri Dan 27.05.2019 14:44

@ButiriDan спасибо, что обратили мое внимание на редактирование поста. Надеюсь, я правильно отредактировал

Tamas tom 27.05.2019 15:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема возникла из-за того, что Factory() инициализируется для создания COM-объекта. com.sun.jna.platform.win32.COM.util.Factory использует поток для выполнения вызовов, и этот поток устанавливает верхний предел времени выполнения, который по умолчанию составляет 5000 мс. Поэтому я увеличил время выполнения потока до 15000 мс.

facade.comFactory = new Factory(new ComThread("COM Thread", 15000, new  
                  Thread.UncaughtExceptionHandler() { 
                        @Override 
                        public void uncaughtException(Thread t, Throwable e) { 
                            // do something intelligent 
                        } 
                    })); 

Другие вопросы по теме