java调用本地方法导致服务自动关闭

拔剑四顾007 2010-02-09 03:04:37

一个生成二维码的程序部分代码如下:
package services;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/*******************************************************************************
*
* @author 熊师虎
* @时间:2010/2/8 @ 此类用来产生二维码
*/
public class DmWrite {
private static final Log log = LogFactory.getLog(DmWrite.class);

static {
String str = readfile();
try {
System.load(str);
} catch (Exception e) {
log.error("请检查是否配置正确!", e);
}
}
/***************************************************************************
* 本地方法,c语言来实现此方法,用来生成二维码
*
* @param s
* :传入字符串
* @param path:二维码生成路径
*/
public native void dmwrite(String s, String path);

// 将构造函数私有化,采用单例模式来实现
private DmWrite() {

}

private static DmWrite dw = new DmWrite();

/***************************************************************************
* 得到此类的一个实例
*
* @return:此类对象的一个实例,new DmWrite()
*/
public static DmWrite getInstance() {
if (dw == null) {
dw = new DmWrite();
}
return dw;
}

/***************************************************************************
* 生成二维码
*
* @param str:传入字符串
* @param path:
* 二维码生成路径
*/
public void drawBarCode(String str, String path) {
this.dmwrite(str, path);
System.out.println("haha");
}


/***************************************************************************
* 得到dll文件的绝对路径
*
* @return String
*/
private static String readfile() {
File file = new File(DmWrite.class.getClassLoader().getResource(
"dmwrite.dll").getFile());

try {
return URLDecoder.decode(file.getAbsolutePath(), "utf-8");
} catch (UnsupportedEncodingException e) {
log.error("请检查是否配置正确!", e);
}
return null;
}

public static void main(String[] args) {
DmWrite.getInstance().drawBarCode("13687952362", "c:\\temp.jpg");
//DmWrite.getInstance();
//DmWrite.getInstance();
}

}
在页面输入数据经过一个servlet类调用上面类中的drawBarCode()方法生成二维码,System.load(str)载入的是一个dll文件,dll文件是用vc代码编写生成的,能够在c盘正确生成temp.jpg图片,System.out.println("haha");没有执行,tomcat自动关闭。不知道是什么原因,后台打印信息如下:

13687952362
c:\temp.jpg
Encode [进入]
Encode 输出文件 [c:\temp.jpg]
Encode [输出文件赋值完毕]
Encode [类型判断完毕]
Encode [HandleParas处理完毕]
Encode [dmtxEncodeDataMatrix处理完毕]
Encode [写图片处理完毕]

servlet类中的部分代码如下:
// 生成二维码
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
request.setCharacterEncoding("utf-8");

String subject = request.getParameter("subject");
String path = request.getParameter("path");

String str = this.getServletContext().getRealPath("pic");// 得到目录的真实路径
File file = new File(str);
if (!file.exists()) {
file.mkdir();// 创建一个新的目录
}
DmWrite dmwrite = DmWrite.getInstance();
dmwrite.drawBarCode(subject, file.getAbsolutePath()
+ File.separator + System.currentTimeMillis() + ".bmp");
out.print("二维码存放的位置为:" + file.getAbsolutePath());
out.println("finished!");
} catch (Exception e) {
e.printStackTrace();
}
out.flush();
out.close();
}
请教的是有什么办法能解决tomcat关闭问题,为什么执行本地方法this.dmwrite(str, path)图片生成功后 System.out.println("haha");没有执行。紧急求教。
...全文
144 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
saly494 2010-02-09
  • 打赏
  • 举报
回复
.....................
colin_pxx 2010-02-09
  • 打赏
  • 举报
回复
靠这么长的代码谁愿意看啊
拔剑四顾007 2010-02-09
  • 打赏
  • 举报
回复
不行,必须是调用现有的产品。重新开发不适合。
david2083 2010-02-09
  • 打赏
  • 举报
回复
不就一个画图程序吗,用JAVA重写一遍就完了

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧