【问题标题】:How do I call main method of one class inside another class?如何在另一个类中调用一个类的主要方法?
【发布时间】:2012-09-06 21:36:48
【问题描述】:

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

【问题讨论】:

  • 有什么异常吗?
  • @MvG 类转换异常。我试图将从java.util.Vector 类'toArray 返回的数组转换为String[]。向量是Vector&lt;String&gt;
  • @ErhanBagdemir,引用的问题是关于在单独的进程中启动另一个应用程序,而不是同一进程的新线程。跨度>
  • @MvG 我刚刚发布了代码,所以看看它可能会有所帮助:)

标签: java static main


【解决方案1】:

代替

(String[])passVect.toArray()

你应该写

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

或(较短但性能较差)

passVect.toArray(new String[0])

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

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

【讨论】:

  • 等等,我猜是添加的Path 导致了问题。你能纠正它吗? PathtoString() 没有返回任何内容,因为我尝试使用 System.out.println() 打印它并且屏幕上什么也没有
  • 先生,我认为是 DirectoryStream&lt;&gt; 导致了问题。
  • @DummyDerp:上述修复应该避免将 Vector 转换为数组时遇到的类转换异常。在此之前或之后可能还有其他错误,您可能会通过不像第一个 catch 块那样忽略异常来了解更多信息。但由于这些似乎是独立的问题,我建议您查看下一个异常,尝试自己修复,如果失败,请提出一个新的详细问题,包括代码和异常。
  • 错误是因为 passPath 获得了一个空值分配给它。我修好了它。几分钟后会告诉你结果
  • 这里还有一个问题:stackoverflow.com/questions/12412938/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多