尝试打开Excel工作簿时在com.sun.proxy。$ Proxy10.Open中获得UndeclaredThrowableException

时间:2019-05-27 12:32:04

标签: java excel

我在一个插件中具有一项功能,该功能可以将一些清单项目导出到Excel文件中。以前,一切正常,但是由于几天前尝试打开excel工作簿时,我收到$ Proxy10.Open()错误。我不知道此信息是否相关,但是我只能在几台计算机上重现此问题,在某些计算机上,只有在我远程连接它的情况下,我才能重现此问题。

错误是:

    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 :(得分:0)

问题来自为COM对象创建而初始化Factory()的地方。 com.sun.jna.platform.win32.COM.util.Factory使用线程来运行调用,并且该线程强加了执行时间的上限,默认情况下为5000ms。因此,我将线程的执行时间延长到15000ms。

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