我最近写了一个实现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);
}
}
我试图做的是调用第一个类的 main 方法,以便保留对该类的引用,并在完成后从中获取数据。所以我在第二堂课上添加了这样的东西:
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"之后完成,一旦"A"超出范围,第一个类的所有内容都会丢失。因此,当我尝试在"C"处获取数据时,那里什么都没有。如果是这种情况,有什么方法可以在第一个类的数据丢失之前访问它吗?
我对多线程程序没有那么多了解,所以这可能只是一个非常简单的解决方案,我以前从未见过。
这不起作用的原因是每个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();
}