2015-06-19 73 views
-3

我正在製作一個非常簡單的jar來解壓縮zip並運行其中的jar。我遇到的問題是它根本沒有做任何事情。Jar忽略所有方法

這是jar的主要和唯一類文件。清單確實指向它,並加載沒有錯誤。

import java.io.File; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.io.FileWriter; 
import java.io.BufferedWriter; 
import java.io.BufferedOutputStream; 
import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.FileOutputStream; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import static java.lang.Integer.parseInt; 
import java.net.URLConnection; 
import java.net.URL; 
import java.util.zip.ZipFile; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 
import java.util.Enumeration; 
import sign.signlink; 
import java.nio.file.*; 
import java.io.FileReader; 

    public class ClientUpdater { 

    private String fileToExtractNew = "/client.zip"; 

    private String getJarDir() throws FileNotFoundException, IOException{ 
      String linebuf="",verStr=""; 
      FileInputStream fis = new FileInputStream("/runLocationURL.txt"); 
      BufferedReader br= new BufferedReader(new InputStreamReader(fis)); 
      while ((linebuf = br.readLine()) != null) { 
       verStr = linebuf; 
      } 
      return verStr; 
    } 

    public static void main(String[] args) { 
System.out.println("start"); 
    } 

    private void unZip() { 
    System.out.println("unzipping"); 
     try { 
      ZipEntry zipEntry; 
      //client 
      BufferedInputStream bufferedInputStreamNew = new BufferedInputStream(new FileInputStream(this.fileToExtractNew)); 
      ZipInputStream zipInputStreamNew = new ZipInputStream(bufferedInputStreamNew); 

      //client 
      while ((zipEntry = zipInputStreamNew.getNextEntry()) != null) { 
       String stringNew = zipEntry.getName(); 
       File fileNew = new File(this.getJarDir() + File.separator + stringNew); 
       if (zipEntry.isDirectory()) { 
        new File(this.getJarDir() + zipEntry.getName()).mkdirs(); 
        continue; 
       } 
       if (zipEntry.getName().equals(this.fileToExtractNew)) { 
        this.unzipNew(zipInputStreamNew, this.fileToExtractNew); 
        break; 
       } 
       new File(fileNew.getParent()).mkdirs(); 
       this.unzipNew(zipInputStreamNew, this.getJarDir() + zipEntry.getName()); 
      } 
      zipInputStreamNew.close(); 
     } 
     catch (Exception var1_2) { 
      var1_2.printStackTrace(); 
     } 
    } 

    private void unzipNew(ZipInputStream zipInputStreamNew, String stringNew) throws IOException { 
    System.out.println("unzipping new"); 
     FileOutputStream fileOutputStreamNew = new FileOutputStream(stringNew); 
     byte[] arrby = new byte[4024]; 
     int n = 0; 
     while ((n = zipInputStreamNew.read(arrby)) != -1) { 
      fileOutputStreamNew.write(arrby, 0, n); 
     } 
     fileOutputStreamNew.close(); 
     Runtime.getRuntime().exec("java -jar " + getJarDir() + "/Project Pk Client.jar"); 
     System.exit(0); 
    } 
} 

它顯示「開始」消息,但不顯示其他2,因此它永遠不會到達這些方法。是因爲他們沒有被召喚?我仍然在學習Java。

+0

好吧,那就是我的想法。那麼我該如何解決這個問題呢?我試着添加unZip();到主要的方法,但它說,我不能調用一個靜態的靜態方法。就我的知識達到這一點而言。 :D – VirtualJunky

回答

2

您實際上必須從main調用其他方法。現在,你要告訴計算機要做的就是打印start然後退出。函數不會簡單地通過現有的方式被調用。

看起來你快速瀏覽一下,你只需要在你的main函數中加上unzip();,就在System.out.println之後。

要做到這一點,你需要說的是,其他方法是static,所以你需要說private static void unZip()而不是private void unZip()。對於其他方法也要這樣做。

import java.io.*; 
import static java.lang.Integer.parseInt; 
import java.net.URLConnection; 
import java.net.URL; 
import java.util.zip.ZipFile; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 
import java.util.Enumeration; 
import sign.signlink; 
import java.nio.file.*; 

public class ClientUpdater { 

    private String fileToExtractNew = "/client.zip"; 

    private static String getJarDir() throws FileNotFoundException, IOException{ 
     String linebuf="",verStr=""; 
     FileInputStream fis = new FileInputStream("/runLocationURL.txt"); 
     BufferedReader br= new BufferedReader(new InputStreamReader(fis)); 
     while ((linebuf = br.readLine()) != null) { 
      verStr = linebuf; 
     } 
     return verStr; 
    } 

    public static void main(String[] args) { 
     System.out.println("start"); 
     unZip(); 
    } 

    private static void unZip() { 
     System.out.println("unzipping"); 
     try { 
      ZipEntry zipEntry; 
      //client 
      BufferedInputStream bufferedInputStreamNew = new BufferedInputStream(new FileInputStream(this.fileToExtractNew)); 
      ZipInputStream zipInputStreamNew = new ZipInputStream(bufferedInputStreamNew); 

      //client 
      while ((zipEntry = zipInputStreamNew.getNextEntry()) != null) { 
       String stringNew = zipEntry.getName(); 
       File fileNew = new File(this.getJarDir() + File.separator + stringNew); 
       if (zipEntry.isDirectory()) { 
        new File(this.getJarDir() + zipEntry.getName()).mkdirs(); 
        continue; 
       } 
       if (zipEntry.getName().equals(this.fileToExtractNew)) { 
        this.unzipNew(zipInputStreamNew, this.fileToExtractNew); 
        break; 
       } 
       new File(fileNew.getParent()).mkdirs(); 
       this.unzipNew(zipInputStreamNew, this.getJarDir() + zipEntry.getName()); 
      } 
      zipInputStreamNew.close(); 
     } 
     catch (Exception var1_2) { 
      var1_2.printStackTrace(); 
     } 
    } 

    private static void unzipNew(ZipInputStream zipInputStreamNew, String stringNew) throws IOException { 
     System.out.println("unzipping new"); 
     FileOutputStream fileOutputStreamNew = new FileOutputStream(stringNew); 
     byte[] arrby = new byte[4024]; 
     int n = 0; 
     while ((n = zipInputStreamNew.read(arrby)) != -1) { 
      fileOutputStreamNew.write(arrby, 0, n); 
     } 
     fileOutputStreamNew.close(); 
     Runtime.getRuntime().exec("java -jar " + getJarDir() + "/Project Pk Client.jar"); 
     System.exit(0); 
    } 
} 
+0

我知道這會很簡單。非常感謝你。 :) – VirtualJunky

+0

@VirtualJunky你很歡迎:)。如果答案是令人滿意的,請考慮將其標記爲未來訪問者的正確答案。 – Jashaszun

+0

是的,我正在嘗試,但一直告訴我,我需要等待1分鐘出於某種原因。但現在明白了! – VirtualJunky