2016-04-25 91 views
2

我对这个问题非常困惑。前几次运行此代码时没有发生,但在此之后,我无法再运行它。它只在使用我的Java代码下载后才会中断。我从我的网站上下载了一个jar文件,然后使用ProcessBuilder来运行它。这一切都工作得很好的第一对夫妇的时候,但我跑了几次,它开始给我在Java中下载.jar文件后“无主清单属性”

no main manifest attribute, in ...\AppData\Local\GDRQ\bin\launch_gdbotbin.jar

这是我用来下载并运行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在原始版本为2.5 MB时也约为125KB。

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

EDIT 2我甚至尝试进入下载jar文件用WinRAR和手动更改META-INF/MANIFEST.MF文件中有设置主类正确,而这样做之后,它仍然没有跑。

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

编辑4即使我做了Micheal Markidis的推荐,它开始再次给我没有主要的表现属性错误。

+0

parm字符串是什么样的? –

+0

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

+0

你不是试图从java运行jar文件吗?你不会使用java命令吗? –

回答

0

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

我改变什么,我的环境:

  1. 我拿出写入设置文件
  2. 我拿出代码的代码是否移动

    Files.move(targetFile.getAbsoluteFile()。toPath(),new File(System.getProperty(“user.home”)+“\ AppData \ Local \ GDRQ \ bin \ launch_gdbotbin.jar”) .toPath(),StandardCopyOption.REPLACE_EXISTIN G);

  3. 你需要有

    的String [] PARM = { “的java”, “罐子”,System.getProperty( “的user.home”)+“路径/到/你/文件/launch_gdbotbin.jar“};

我得到这个拿出enter image description here

  • 我会尝试复制我做了什么,然后逐步放回代码的其他PICES我删除。
  • 注意:每次只需手动删除launch_gdbotbin.jar现在。

    +0

    非常感谢你! :)它现在就像一个魅力! – TreeHouseFalcon

    +0

    太棒了。我知道我们真的很接近。尝试回发问题与冲突的代码是什么。这样我可以将它添加到未来观点的答案中。 –

    +0

    我很确定它将文件从下载文件夹移动到bin文件夹。班级可能没有找到,因为它在跑步的同时正在改变。 – TreeHouseFalcon

    相关问题