尝试打开 excel 工作簿时在 com.sun.proxy.$Proxy10.Open

我在一个插件中有一个功能,可以将一些清单项目导出到 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());

我想问一下这个错误的根本问题是什么,欢迎任何提示。我试图找到任何相关的问题或错误,但没有找到。


潇潇雨雨
浏览 103回答 1
1回答

Helenr

问题出在为 COM 对象创建初始化 Factory() 的地方。com.sun.jna.platform.win32.COM.util.Factory 使用一个线程来运行调用,该线程强加了执行时间的上限,默认情况下为 5000 毫秒。所以我把线程的执行时间延长到15000ms。facade.comFactory = new Factory(new ComThread("COM Thread", 15000, new                    Thread.UncaughtExceptionHandler() {                         @Override                         public void uncaughtException(Thread t, Throwable e) {                             // do something intelligent                         }                     })); 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java