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()常に配列を返すためです。(ちなみに、その逆も可能です。クラスのさまざまなメソッドで使用される を期待する場所にa を渡すことができます。実際、メソッドから返されるものは、標準に準拠していたとしても、これが、コンパイラが文句を言わなかった理由です: コンパイラはメソッドの内部構造を認識していない、または気にしていないため、戻り値の型から判断すると、サブクラスの配列への明示的なキャストが可能である可能性があります配列がそのように作成された場合)。Object[]String[]String[]Object[]ArraystoArray()String[]

そのtoArray(T[])型の配列を引数として渡すと、呼び出しは必要な型の配列を返します。渡された引数の長さが正しい場合は、直接使用されます。それ以外の場合は、新しい配列が割り当てられます。このため、最初に正しい長さを割り当てると、途中で 1 つの割り当てを回避できます。

于 2012-09-13T18:29:33.140 に答える