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

时间:2012-09-13 18:16:24

标签: java static main

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

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;
    }

1 个答案:

答案 0 :(得分:1)

而不是

(String[])passVect.toArray()

你应该写

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

或(更短但性能更差)

passVect.toArray(new String[0])

原因是toArray()将始终返回Object[]数组,即使其所有成员都是字符串,也无法将其转换为String[]数组。 (顺便说一句,反之亦然:你可以在期待String[]的地方传递一个Object[]Arrays类的各种方法使用它。事实上,返回的东西来自toArray()方法可能String[],即使在符合标准的实现中它也不是。这就是编译器没有抱怨的原因:它不知道或不关心方法的内部,并从返回类型判断,如果数组是这样创建的,则可能显式转换为子类数组。)

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