您的位置:首页 > 运维架构

OpenOffice配合jodconverter多线程转换文件socket出现异常

2013-07-03 21:17 344 查看
package com.jodconvert.socket;

import java.io.File;

import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;

/**
* 文件转换工具类 主要能将offcie txt类型文件转化成 pdf
*
* @author xzy 2013-6-8下午03:54:50
*
*/
public class OpenOfficeTools {

private static OfficeManager officeManager;

private static OpenOfficeTools instance = new OpenOfficeTools();

// 设置任务执行超时时间, 分钟为单位
// private static final long TASK_EXECUTION_TIMEOUT = 1000 * 60 * 1L *
private static final long TASK_EXECUTION_TIMEOUT = 1000 * 60 * 1L * 1;

// 设置任务队列超时时间,分钟为单位
// private static final long TASK_QUEUE_TIMEOUT = 1000 * 60 * 1L *
private static final long TASK_QUEUE_TIMEOUT = 1000 * 60 * 1L * 1;

public static OpenOfficeTools getInstance() {
return instance;
}

public static boolean convert2PDF(File inputFile,File pdfFile) {

startService();

OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);

try {
converter.convert(inputFile, pdfFile);

} catch (Exception e) {
System.out.println("exception:"+e.getMessage());
}

stopService();

return pdfFile.isFile();
}

/**
* 启动openoffice服务
*/
private static void startService() {
DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
//		setProcessManager
try {
// 设置OpenOffice.org安装目录
configuration.setOfficeHome("C:\\Program Files (x86)\\OpenOffice.org 3");
// 设置转换端口,默认为8100
//			configuration.setPortNumbers(new int[] { 8100, 8101, 8102, 8103 });
configuration.setPortNumbers(8100);
// 设置任务执行超时时间
configuration.setTaskExecutionTimeout(TASK_EXECUTION_TIMEOUT);
// 设置任务队列超时时间 1000 * 60 * 60 * 24L(24h)
configuration.setTaskQueueTimeout(TASK_QUEUE_TIMEOUT);
officeManager = configuration.buildOfficeManager();
officeManager.start(); // 启动服务
} catch (Exception ce) {
//			log.error(ce.getMessage(), ce);
ce.printStackTrace();
}
}

/**
* 关闭openoffice服务
*/
private static void stopService() {
if (officeManager != null) {
officeManager.stop();
}
}
}

如上所示

用多线程转换时,启动多个,总会有一个转换不成功,而且进程一直会卡在后台,求大神指导!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐