0

我有一个线程,当当前应用程序关闭时,必须启动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;
    }
4

1 回答 1

1

代替

(String[])passVect.toArray()

你应该写

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

或(更短但性能更低)

passVect.toArray(new String[0])

原因是它toArray()总是会返回一个数组,即使它的所有成员都是字符串Object[],你也无法将其转换为数组。String[](顺便说一下,相反的情况是可能的:您可以String[]在期望的地方传递 a Object[],它被Arrays类的各种方法使用。事实上,从toArray()方法返回的东西可能是 a String[],即使在符合标准的情况下实现它不是。这就是编译器没有抱怨的原因:它不知道也不关心方法的内部,从返回类型来看,显式转换为子类的数组是可能的如果数组是这样创建的。)

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

于 2012-09-13T18:29:33.140 回答