Получено исключение UndeclaredThrowableException на com.sun.proxy. $ Proxy10.Открывается при попытке открыть книгу Excel - PullRequest
0 голосов
/ 27 мая 2019

У меня есть функция в плагине, которая экспортирует некоторые элементы контрольного списка в файл 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());

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

1 Ответ

0 голосов
/ 31 мая 2019

Проблема возникла с момента инициализации 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 
                        } 
                    })); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...