从另一个类运行后,访问一个类的成员

时间:2016-03-14 01:49:15

标签: java class main runnable

我最近编写了一个实现run方法的类,然后解析视频文件,同时抓取有意义的信息。现在我创建了一个新类,它在同一个文件上执行类似的操作,但在获取其他有意义的信息时使用不同的解析方法。长话短说,我需要使用两种不同的解析方法,因为有些数据不能被一个数据提取,有些数据不能被另一个提取。我面临的问题是两个类都实现了run方法,但现在我需要启动新类,获取信息,启动另一个类,获取信息,然后比较信息并将其打印到控制台。这是我尝试做的事情的要点:

public class first {
    [public member variables]
    ....
    public void run(String[] args) {
        // parse the file from args and store data
    }

    public static void main(String[] args) {
        new first().run(args); // <------ A
    }
}

public class second {
    [public member variables]
    ....
    public void run(String[] args) {
        // parse the file from args and store data
    }

    public static void main(String[] args) {
        new second().run(args);
    }
}

我尝试做的是调用第一类的主要方法,以便保留对类的引用,并在它完成时从中获取数据。所以我在第二节课中添加了这样的内容:

public class second {
    [public member variables]
    first firstClass;
    int dataFromFirst = 0;
    ....
    public void run(String[] args) {
        // parse the file from args and store data
        firstClass = new first();
        firstClass.main(args); // <------ B
        dataFromFirst = firstClass.getSomeData(); // <------ C
    }

    public static void main(String[] args) {
        new second().run(args);
    }
}

当我开始第二课时,一切运行正常,解析器完成了第二课和第一课的工作,但当我尝试提取第一课时发现的数据时,它就是空值。我认为,一旦第一堂课的主要方法在B&#39;之后完成,一旦&#39; A&#39;超出范围,第一堂课的一切都丢失了。因此,当我尝试在C&#39;处获取数据时,那里什么都没有。如果是这种情况,是否有任何方法可以在丢失之前访问头等数据?

我对多线程程序知之甚少,所以这可能只是一个我以前从未见过的非常简单的解决方案。

1 个答案:

答案 0 :(得分:1)

这不起作用的原因是每个main方法都创建自己的类实例并在本地使用它。这与线程无关,事实上,据我所知,你的程序实际上并没有使用多线程。

要修复它,请不要从一个main方法调用另一个方法。事实上,首先甚至没有两个main方法,几乎​​没有理由拥有多个方法。相反,只需直接拨打run,就像这样:

public void run(String[] args) {
    // parse the file from args and store data
    firstClass = new first();
    firstClass.run(args);
    dataFromFirst = firstClass.getSomeData();
}