繁体   English   中英

如何在另一个类中调用一个类的main方法?

[英]How do I call main method of one class inside another class?

我有一个线程,当当前应用程序关闭时,必须启动另一个类的main()方法。
我在线程的run()中包含ClassName.main(someStringArray) ,但未调用该方法。 可能出了什么问题?
我定义的线程

private class VideoCreator extends Thread{
        public VideoCreator(){
            pathToPass = savePath + "/" + "video.mov";
            passVect.add("-w");
            passVect.add("1280");
            passVect.add("-h");
            passVect.add("800");
            passVect.add("-f");
            passVect.add("25");
            passVect.add("-o");
            passVect.add(pathToPass);
        }
        @Override
        public void run(){
            try{
                jpegFiles = Files.newDirectoryStream(Paths.get(pathToPass).getParent(),"*.jpg");
                for(Path jpegFile : jpegFiles){
                    passVect.add(jpegFile.toString());
                }
            }catch(IOException e){

            }
            try{
                JpegImagesToMovie.main((String[])passVect.toArray());
            }catch(Exception e){
                System.out.println("Dammit Error!");
                e.printStackTrace();
            }
        }
        public void cleanUp(){

        }
        String pathToPass;
        Vector<String> passVect = new Vector<>(100,200);
        DirectoryStream<Path> jpegFiles;
    }

代替

(String[])passVect.toArray()

你应该写

passVect.toArray(new String[passVect.size()])

或(性能稍差但表现较差)

passVect.toArray(new String[0])

原因是toArray()将始终返回Object[]数组,即使其所有成员都是字符串,也无法将其转换为String[]数组。 (顺便说一句,可能是相反的:您可以在需要Object[]地方传递String[] ,该位置可被Arrays类的各种方法使用。实际上,从toArray()方法返回的东西可能具有是String[] ,即使不是在符合标准的实现中也是如此,这就是编译器没有抱怨的原因:它不知道或不在乎方法的内部,并从返回类型判断,如果这样创建数组,则可能会显式转换为子类的数组。)

如果将该类型的数组作为参数传递,则toArray(T[])调用将返回所需类型的数组。 如果传递的参数长度正确,将直接使用; 否则将分配一个新的数组。 因此,首先分配正确的长度将避免沿途进行一次分配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM