当前位置: 首页 > 知识库问答 >
问题:

下载后“无主清单属性”。Java中的jar文件

锺离锦
2023-03-14

我对这个问题很困惑。在运行这段代码的前几次,它没有发生,但在那之后,我无法让它再次运行。它只有在使用我的Java代码下载后才会崩溃。我的代码从我的网站下载了一个jar文件,然后使用ProcessBuilder运行它。最初几次都很好,但我又运行了几次,它开始给我带来了好处

没有主清单属性,在。。。\AppData\Local\GDRQ\bin\launch\u gdbotbin。罐子

下面是我用来下载和运行jar文件的java代码:

try {
        System.out.println("starting update...");

        File targetFile = new File(System.getProperty("user.home") + "\\AppData\\Local\\GDRQ\\downloading\\launch_gdbotbin.jar");
        URL downloadUrl = new URL("http://www.dropmoose.com/gdbotpro/launch_gdbotbin.jar");

        InputStream inStream = downloadUrl.openStream();
        //System.out.println(inStream.available());
        BufferedInputStream bufIn = new BufferedInputStream(inStream);
        OutputStream out = new FileOutputStream(targetFile);
        BufferedOutputStream bufOut = new BufferedOutputStream(out);
        byte[] buffer = new byte[inStream.available()];

        while (true) {
            int nRead = bufIn.read(buffer, 0, buffer.length);

            if (nRead <= 0) {
                break;
            }

            bufOut.write(buffer, 0, nRead);
        }

        bufOut.flush();
        out.close();
        inStream.close();

        BufferedWriter bw = new BufferedWriter(new FileWriter(settingsFile));
        for (int i = 0; i < settings.size(); i++) {
            bw.write(settings.get(i));
            bw.newLine();
        }

        bw.close();
        System.out.println("update successful");
        infoPane.dispose();

        System.out.println("cleaning up...");
        Files.move(targetFile.getAbsoluteFile().toPath(), new File(System.getProperty("user.home") + "\\AppData\\Local\\GDRQ\\bin\\launch_gdbotbin.jar").toPath(), StandardCopyOption.REPLACE_EXISTING);
    } catch (Exception e) {
        JOptionPane.showConfirmDialog(null, "An error occured (code 14): Unable to update!");
        infoPane.dispose();
    }

String[] parm = {"jar", "-jar", System.getProperty("user.home") + "\\AppData\\Local\\GDRQ\\bin\\launch_gdbotbin.jar"};

ProcessBuilder pb = new ProcessBuilder(parm);
    pb.redirectOutput(Redirect.INHERIT);
    pb.redirectError(Redirect.INHERIT);

    try {
        pb.start();
    } catch (IOException e) {
        e.printStackTrace();
    }

我试着用main(String[]args)方法和Manifest-Version: 1.0创建了一个MANIFEST. MF文件,但它仍然不起作用。我做错了什么,为什么我的manifest.mf文件不起作用?代码下载的jar也是大约125KB,而原始的是2.5 MB。

编辑如果你转到下载jar文件的代码中的url,然后运行它,它运行得非常好。

编辑2我甚至尝试使用WinRAR进入下载的jar文件并手动更改META-INF/MANIFEST。MF文件来正确设置主类,这样做之后,它仍然没有运行。

编辑3清单问题消失了。但是现在我在加载引用的库时遇到了一个问题。我正在使用PircBotX,当您运行jar文件(使用String[]parm={"java","launch_gdbotbin.jar","gd.bot.main.BotHandler"})时,它会抛出ClassNotFoundExctive。

编辑4即使在我按照Micheal Markidis的建议做了之后,它又开始给我“无主manifeset”属性错误。

共有1个答案

羊舌承天
2023-03-14

我实际上可以让你的代码运行:

我为我的环境改变了什么:

>

文件夹。移动(targetFile.getAbsoluteFile()。toPath(),新文件(System.getProperty(“user.home”)“\AppData\Local\GDRQ\bin\launch\u gdbotbin.jar”)。toPath(),StandardCopyOption。替换(现有);

你需要有

String[]parm={“html" target="_blank">java”,“-jar”,System.getProperty(“user.home”)“path/to/your/file/launch_gdbotbin.jar”};

注意:现在每次手动删除launch_gdbotbin.jar。

 类似资料:
  • 首先,我看了关于这个话题的类似问题。我还没有找到解决办法。 我想把我一直在做的一个小项目分发给朋友和家人。问题是我不能指望他们都能跑。类文件。因此,我正在努力创造一个新的世界。jar文件,我可以将其转换为。exe文件。然而,我遇到了一个问题。它抱怨缺少主清单属性。在谷歌搜索之后,我决定尝试一个小教程。我正在遵循教程(甚至下载了Hello.jar小文件),但仍然没有获得主清单属性。 当我运行Wind

  • 问题内容: 我最近刚开始在Java中玩Maven。是时候测试我的项目了,它在NetBeans窗口中运行正常,运行在App.java(com.MyCompany.App)中找到的主类,但是当我尝试从命令行运行它时,出现了一个错误: fileName.jar中的“无主要清单属性” 我尝试添加一个manifest.mf文件来指定主要文件,我也进入了项目属性并将其添加为主文件… 这是怎么回事? 问题答案:

  • 我已经看了几个不同的线程,没有找到解决方案。我做了一个项目,使用java和Gradle从google sheets检索数据。我已经创建了一个工件,并通过IntelliJ构建了jar文件。当我尝试使用“java-jar filename.jar”通过终端运行jar时,我得到“no main manifest attribute,in filename.jar” My Manifest.mf位于mai

  • 我知道jar文件应该有一个manifest.mf main-class:属性,以便有一个入口点并使jar文件可以运行。现在,我有了一个jar文件,我已经在下面构建了它。这些类都是卷饼包的一部分。我的MANIFEST.MF文件如下所示:

  • 我知道有很多像这样的题目,但我没有找到答案我的问题。我已经在IntelliJ中创建了JAR文件,并在项目结构中构建了工件。在Java文件夹中,我有一个包META-INF和manifest.mf: 那么我是否应该将它手动添加到IntelliJ中的JAR中呢? Edit:CrazyCoder给出了一个很好的说明,说明META-INF应该在resourse文件夹中,但是我的IntelliJ默认设置一开始

  • 问题内容: 在您的所有帮助下,我得以用Java完成我的第一个项目。现在,我想创建一个jar并运行jar中的应用程序(Java项目- 这是一个普通的控制台应用程序,该应用程序依赖于另一个项目(控制台应用程序))。 我通过右键单击创建了一个带有Eclipse的罐子-导出-创建了一个罐子。当我尝试从cmd运行此jar时,出现错误(以下是我得到的错误) 我用Google搜索了错误-他们中的大多数人都创建了