我对这个问题非常困惑。前几次运行此代码时没有发生,但在此之后,我无法再运行它。它只在使用我的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的推荐,它开始再次给我没有主要的表现属性错误。
parm字符串是什么样的? –
String [] parm = {“jar”,“-jar”,System.getProperty(“user.home”)+“\\ AppData \\ Local \\ GDRQ \\ bin \\ launch_gdbotbin.jar”}; – TreeHouseFalcon
你不是试图从java运行jar文件吗?你不会使用java命令吗? –