自動更新クライアントを作成しようとしています。jarされたクライアントはサーバーに移動し、更新ファイルを要求します。サーバーは更新ファイルを送信します。更新ファイル(バイト配列に変換されたjarファイルを含む)が到着すると、クライアントは、クライアントjarの最新バージョン(更新ファイル内のもの)を持っているかどうかを確認します。ちなみに、参照「in」はサーバーに接続されたソケットです。
UpdateFile uf = (UpdateFile) in.readObject();
System.out.println("Client checking if update needed");
if (!uf.getVersion().equals(myVersion)) {
System.out.println("Client needed update");
uf.update(updateLocation);
}
最新のjarがない場合は、UpdateFileの関数update(String whereToUpdate)を呼び出します。これにより、古いjarファイル(関数update()!を呼び出すファイル)が削除され、byte[]を同じ位置に書き込むことで置き換えられます。
public void update(String location) {
try {
boolean b = (new File(location)).delete();
System.out.println("removed old jar file");
updateJar.writeBytes(location);
} catch (Exception ex) {
ex.printStackTrace();
}
}
このコードでは、updateJarはNetworkingFile(私自身のクラス)です。このNetworkingFileは、シリアル化できないオブジェクトをbyte []に変換し、レシーバーに送信して、ファイルをディスクに書き戻します。
public class NetworkingFile implements Serializable{
byte[] cArray;
String name;
public NetworkingFile(File f, String fileName) {
name = fileName;
compressFile(f);
}
public NetworkingFile(byte[] b, String fileName) {
cArray = b;
name = fileName;
}
public void compressFile(File f) {
cArray = new byte[(int)f.length()];
try {
FileInputStream inputReader = new FileInputStream(f);
BufferedInputStream fileReader = new BufferedInputStream(inputReader);
fileReader.read(cArray, 0, cArray.length);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public String getFileName() {
return name;
}
public byte[] getCompressedFile() {
return cArray;
}
public void writeBytes(String location) {
try {
File writeFile = new File(location);
FileOutputStream writer = new FileOutputStream(writeFile);
writer.write(cArray);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
このコードは、FIRSTjarをコンパイルまたは実行するときにエラーを発生させません。ただし、jarの更新が終了したら、プログラムを終了し、「java-jarfilename.jar」を使用して実行しようとします。ただし、実行時に次のエラーが発生します。エラー:無効または破損したjarファイルDropBoxClient.jar
これを引き起こす可能性のあるアイデアはありますか?すべての助けをいただければ幸いです。