Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jar忽略所有方法_Java - Fatal编程技术网

Java Jar忽略所有方法

Java Jar忽略所有方法,java,Java,我制作了一个非常简单的jar来解压一个zip并运行其中的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.Buffered

我制作了一个非常简单的jar来解压一个zip并运行其中的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

实际上,您必须从
main
调用其他方法。现在,你要告诉计算机做的就是打印
start
,然后退出。函数不能简单地由现有函数调用

快速浏览一下,您似乎只需要添加
unzip()
到您的
main
函数,就在
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);
    }
}

好吧,我就是这么想的。那么我该如何着手解决这个问题呢?我尝试添加unZip();对于main方法,但它说我不能将非静态方法调用为静态方法。这是我所知的最远的情况DAh bummer很好奇你是否能帮我解决另一个问题。这是最后一件小事,那么我的罐子就可以完美地工作了。如果你有时间,你能告诉我为什么它不启动罐子吗?它位于我在原始问题中发布的代码的最底部。我试过使用/和不使用/,但它没有启动jar,没有错误。@VirtualJunky,我不知道答案。我看不出有什么问题。如果你不明白,那么继续问另一个问题。确保在执行此操作时提供所有相关上下文!我想我会这么做的,我得等上2个小时或者别的什么时间,然后伤心地问另一个问题。再次感谢您的帮助和时间。:)