我有一个线程,当当前应用程序关闭时,必须启动另一个类的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;
}
答案 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[])
调用将返回所需类型的数组。如果传递的参数具有正确的长度,则将直接使用;否则将分配一个新阵列。因此,首先分配正确的长度将避免一路分配。