【问题标题】:Accessing Jar Dependencies访问 Jar 依赖项
【发布时间】:2017-07-28 13:04:22
【问题描述】:

我有一个 jar 文件,其中包含整个脚本所依赖的 exe 和横幅图像 (jpg)。如何从自身(jar 文件)访问和使用这两个依赖项?目前 jpg 是通过以下方式访问的:

BufferedImage getBanner = ImageIO.read(new File("banner.jpg"));
JLabel drawBanner = new JLabel(new ImageIcon(getBanner));

并且该exe通过以下方式访问:

String cmd = "exe [params]";
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);

我什至可以在线托管横幅图片,然后让它从那里拉出来,这样我就可以动态更新它。

【问题讨论】:

    标签: java file jar dependencies


    【解决方案1】:

    jre 的类加载器可以“找到”类路径中的任何文件。

    添加一个外部程序,以便您的 jar 可以访问它:

    首先创建一个类加载器并使用您的 ClassLoader 动态获取资源,并让它处理文件位置的路径特定细节。因此......你会做这样的事情:

    URL myExecutable = 
            MyClass.class.getClassLoader().getResource("executable/program.exe");
    

    现在,您应该可以直接访问该程序,就像访问任何其他文件一样。

    File f=new File(myExecutable.toURI());
    

    现在你可以使用

    来调用它了
    Runtime.getRuntime().exec(f.getAbsolutePath());
    

    警告

    此时,问问自己我为什么要在 JAR 文件中捆绑一个 EXE? 最好在 zip 文件中为每个操作系统平台提供一个单独的包。将 jar 和 exe 放在一个 zip 文件中 --- 而不是将特定于操作系统的可执行文件捆绑到您的 java 二进制文件中。

    【讨论】:

    • 感谢您的回答,我会尝试一下。该 exe 适用于我的程序的 Windows 版本; Windows 没有 wget,所以我包含了 wget.exe。
    • 您好,添加第一行时我得到:错误:不兼容的类型。它似乎需要一个 URL,但它找到了一个 InputStream(我在 getResourceAsStream() 中有“wget.exe”)。是否需要其他东西?谢谢!
    猜你喜欢
    • 2018-09-16
    • 2016-11-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多