Java如何将dll文件打包到jar中?

我使用jni写了一个dll,将dll文件放在jar文件根目录,jar中的程序可以正常访问dll,而我把dll打包到jar中,jar却无法找到这个dll文件了。之前我看过有... 我使用jni写了一个dll,将dll文件放在jar文件根目录,jar中的程序可以正常访问dll,而我把dll打包到jar中,jar却无法找到这个dll文件了。之前我看过有的程序是可以把dll打包到jar中,并能够正常调用的。请问如何才能让程序正常调用jar中的文件?
希望大家说得清楚一些,把相关的代码段发上来。谢谢
展开
 我来答
青鸟中关村专家
推荐于2016-11-01 · 知道合伙人软件行家
青鸟中关村专家
知道合伙人软件行家
采纳数:1734 获赞数:8440
就职于北大青鸟中关村,自2004年踏入北大青鸟这个行业,已经有11年工作经验和8年的培训经验,寓教于乐

向TA提问 私信TA
展开全部
//BIN_LIB为JAR包中存放DLL的路径   
//getResourceAsStream以JAR中根路径为开始点   
private synchronized static void loadLib(String libName) throws IOException {   
    String systemType = System.getProperty("os.name");   
    String libExtension = (systemType.toLowerCase().indexOf("win")!=-1) ? ".dll" : ".so";   
       
    String libFullName = libName + libExtension;   
       
    String nativeTempDir = System.getProperty("java.io.tmpdir");   
       
    InputStream in = null;   
    BufferedInputStream reader = null;   
    FileOutputStream writer = null;   
       
    File extractedLibFile = new File(nativeTempDir+File.separator+libFullName);   
    if(!extractedLibFile.exists()){   
        try {   
            in = SMAgent.class.getResourceAsStream(BIN_LIB + libFullName);   
            if(in==null)   
                in =  SMAgent.class.getResourceAsStream(libFullName);   
            SMAgent.class.getResource(libFullName);   
            reader = new BufferedInputStream(in);   
            writer = new FileOutputStream(extractedLibFile);   
               
            byte[] buffer = new byte[1024];   
               
            while (reader.read(buffer) > 0){   
                writer.write(buffer);   
                buffer = new byte[1024];   
            }   
        } catch (IOException e){   
            e.printStackTrace();   
        } finally {   
            if(in!=null)   
                in.close();   
            if(writer!=null)   
                writer.close();   
        }   
    }   
    System.load(extractedLibFile.toString());   
}
浙江启扬智能科技有限公司
2023-06-12 广告
Linux 嵌入式系统中,USB 启动模式能够烧写 ARM 的 uboot 的原因主要有以下几个方面:1. USB 启动模式相对于传统的 BIOS 启动模式来说,具有更高的兼容性和灵活性,可以支持更多的硬件设备和操作系统。2. USB 启动... 点击进入详情页
本回答由浙江启扬智能科技有限公司提供
xiaobaitu7788
推荐于2016-07-05 · TA获得超过661个赞
知道小有建树答主
回答量:392
采纳率:0%
帮助的人:359万
展开全部
这个问题是由于 类加载器 造成的

ClassLoader

你对ClassLoader了解么?
你对 boot ClassLoader了解么?

如过不清楚的话,请查看一下 Java类加载机制.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
E花间一壶酒E
2008-10-20 · TA获得超过118个赞
知道答主
回答量:252
采纳率:0%
帮助的人:181万
展开全部
建议看看CSDN上的这个帖子http://topic.csdn.net/t/20041015/09/3458094.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式