2013-10-01 39 views
1

我在eclipse中有一个openCV项目。现在我试图让它运行Jar,但无法启动它,一旦试图运行该jar。 我试过以下 - https://groups.google.com/forum/#!topic/javacv/ziqKIb7PgYk如何为Eclipse的javaCV或openCV项目制作可运行jar

但我无法正确理解。任何人都可以解释做有需要的正确方法吗?

在我的系统中,安装了OpenCV。一旦我尝试从日食 运行项目,一切工作正常。但是当我尝试从 runnabelJar那样做时,它不会。我发现这个问题,我没有包含 .dll文件,所以我应该怎么做。

+0

检查:http://stackoverflow.com/questions/16282969/exporting-executable-jar-file-that-uses-opencv – user2339071

回答

2

我终于找到了解决办法。是的,我们可以在使用javaCV时轻松地从eclipse制作Runnable罐子,无需使用ant或maven构建。

不需要使用OpenCV设置类路径,您只使用javaCV而无意使用jni构建。

  • 创建一个Java项目。
  • 复制所有罐子。您可以避免使用x86或linux或非必需罐子作为 。

enter image description here

  • 查找JRE版本,如果32位,获得OpenCV的32位 库其他64位的路径。您可以将这些DLL放在任何位于 系统中的位置。无需放置任何特定路径。
  • 转到OpenCV的罐子,展开它,单击本地库位置, 编辑和浏览路径

enter image description here

完蛋了,完成任务,现在做运行的JAR或任何东西,它会工作像魅力。

一旦向任何用户提供了可运行jar,那么用户的openCV路径应该设置在类路径中,或者您提供了dll,并且您可以将该库加载到任何静态块中。

+0

伟大thx。你有一个示例脚本如何提供DLL? –

+0

OpenCv 3.0.0需要什么? –

0

建设与ANT罐(用于javacv 0.9):

  1. 安装OpenCV(和/或ffmpeg)来

  2. 下载javacv从https://github.com/bytedeco/javacv

  3. 创建一个Java项目和在根目录 中创建目录'lib','lib32'和'lib64',并将java64中的x64 jar添加到lib64中 - 对于lib32和lib中的其他版本没有bit

  4. 将以下jar添加到项目的buildpaht中(添加外部JAR ...),并设置为OpenCV的本地库路径(和/或的ffmpeg)

enter image description here

  • 样品测试类
  • public class Main { 
        public static void main(String[] args) throws Exception, IOException { 
         OpenCVFrameGrabber frameGrabber = new OpenCVFrameGrabber(new File(".\\tmp_files\\small.mp4")); 
         frameGrabber.start(); 
         IplImage origImg = frameGrabber.grab(); 
    
         //create canvas frame named 'Demo' 
         final CanvasFrame canvas = new CanvasFrame("Demo"); 
    
         //Show image in canvas frame 
         canvas.showImage(origImg); 
    
         //This will close canvas frame on exit 
         canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);  
        } 
    } 
    
    1. ANT -script
    <?xml version="1.0" encoding="UTF-8" standalone="no"?> 
    <project basedir="." default="main" name="Main"> 
        <property environment="env"/> 
        <property name="debuglevel" value="source,lines,vars"/> 
        <property name="target" value="1.6"/> 
        <property name="source" value="1.6"/> 
        <property name="build.dir"  value="bin"/> 
        <property name="src.dir"  value="src"/> 
        <property name="lib.dir"  value="lib"/> 
        <property name="lib32.dir"  value="lib32"/> 
        <property name="lib64.dir"  value="lib64"/> 
        <property name="classes.dir" value="${build.dir}/classes"/> 
        <property name="jar.dir"  value="${build.dir}/jar"/> 
        <property name="jar.file"  value="${jar.dir}/buildOpenCvTest32_64.jar"/> 
        <property name="manifest.file" value="${jar.dir}/MANIFEST.MF"/> 
    
        <property name="main.class" value="test.Main"/> 
    
        <path id="external.jars"> 
         <fileset dir="${lib.dir}" includes="**/*.jar"/> 
         <fileset dir="${libV.dir}" includes="**/*.jar"/> 
        </path> 
    
        <path id="project.classpath"> 
         <pathelement location="${src.dir}"/> 
         <path refid="external.jars" /> 
        </path> 
    
        <target name="init"> 
         <mkdir dir="${build.dir}"/> 
         <mkdir dir="${classes.dir}"/> 
         <mkdir dir="${jar.dir}"/> 
         <copy includeemptydirs="false" todir="${build.dir}"> 
          <fileset dir="${src.dir}"> 
           <exclude name="**/*.launch"/> 
           <exclude name="**/*.java"/> 
          </fileset> 
         </copy> 
        </target> 
    
        <target name="clean"> 
         <delete dir="${build.dir}"/> 
        </target> 
    
        <target name="cleanall" depends="clean"/> 
    
        <target name="build" depends="init"> 
         <echo message="${ant.project.name}: ${ant.file}"/> 
         <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}" classpathref="project.classpath"> 
          <src path="${src.dir}"/> 
         </javac> 
        </target> 
    
        <target name="build-jar" depends="build"> 
         <delete file="${jar.file}" /> 
         <delete file="${manifest.file}" /> 
    
         <manifest file="${manifest.file}" > 
          <attribute name="built-by" value="${user.name}" /> 
          <attribute name="Main-Class" value="${main.class}" /> 
         </manifest> 
    
         <jar destfile="${jar.file}" 
          basedir="${build.dir}" 
          manifest="${manifest.file}"> 
          <fileset dir="${classes.dir}" includes="**/*.class" /> 
          <zipgroupfileset dir="${lib.dir}" includes="**/*.jar" /> 
          <zipgroupfileset dir="${lib32.dir}" includes="**/*.jar" /> 
          <zipgroupfileset dir="${lib64.dir}" includes="**/*.jar" /> 
         </jar> 
    
        </target> 
    
        <target name="main" depends="build-jar"> 
         <description>Main target</description> 
         </target> 
    </project> 
    
  • 运行ANT - 罐子应该每32位和64位的Windows系统上运行。同样应该为ffmpeg库和UNIX系统工作
  • 相关问题