Jar忽略所有方法

问题描述:

我正在制作一个非常简单的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

您实际上必须从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