0

だから私は、単純にconfig.javaファイルを作成し、設定情報を入れることになっているこのビルダーを作成しています。コンパイルします。次に、既存のjarをそれで更新します。すべてが機能しており、エラーは発生していませんが、実行Runtime.getRuntime().exec("jar uf "+out+" "+ cClass);すると失敗するようです。上記のコマンドの出力を取得しようとしましたが、何も表示されていません。私もこれを手動でやろうとしましたが、うまくいきました。私の質問は、何がうまくいかないのか、どうすれば修正できるのかということです。

Runtime.getRuntime().exec("javac "+config);         
File cClass = new File (config.getParentFile().getAbsolutePath() +"/configs.class");
Runtime.getRuntime().exec("jar uf "+out+" "+ cClass);   

Out は更新する Jar ファイル、config は config.java cClass は config.class です。

これが私のUpdateJarクラス全体です

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class cmd extends Thread{
private File out;
private File config;
public cmd(File out, File config){
    this.out = out;
    this.config = config;
    this.start();
}
    public void run(){
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
    try {
        Process p = Runtime.getRuntime().exec("jar uvf "+out+" "+config.getParentFile().getAbsolutePath()+("/configs.class"));
        BufferedReader stdInput = new BufferedReader(new 
                 InputStreamReader(p.getInputStream()));
            BufferedReader stdError = new BufferedReader(new 
                 InputStreamReader(p.getErrorStream()));
            System.out.println(stdInput.readLine());
            System.out.println(stdError.readLine());
    } catch (IOException e) {
        e.printStackTrace();
    }
    }
}

返される出力は次のとおりです。

2013-03-28 20:18:58.363 null
2013-03-28 20:18:58.363 [parsing started RegularFileObject[/Users/jorisbolsens/Desktop/configs.java]]
2013-03-28 20:19:04.364 adding: Users/jorisbolsens/Desktop/configs.class(in = 767) (out= 512)(deflated 33%)
2013-03-28 20:19:04.364 null

好奇心から、out.jar のすべてのファイルを抽出したところconfigs.class、実際には jar に入れられ、単にフォルダーに入れられていることがわかりました。具体的にusers.jorisbolsens.Desktopします。

4

1 に答える 1

0

私はこれを直しました。とても簡単だったので、最初にこれを試さなかったのは本当にばかげていると感じました。私は

Runtime.getRuntime().exec("jar uvf "+out+" "+config.getParentFile().getAbsolutePath()+("/configs.class"));

一部

Runtime.getRuntime().exec("jar uvf "+out+" -C "+config.getParentFile().getAbsolutePath()+ " configs.class");

すべてが完全に機能するようになりました。エリクソンのすべての助けに感謝したいと思います。

于 2013-03-29T05:04:46.650 に答える