【问题标题】:Access one class's members after running it from another class从另一个类运行后访问一个类的成员
【发布时间】:2016-03-14 01:49:14
【问题描述】:

我最近编写了一个实现 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(),并且应该只在程序启动时由系统调用。跨度>

标签: java class main runnable


【解决方案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();
}

【讨论】:

  • 谢谢!不知道为什么我还没有尝试过,但这解决了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 2022-01-10
  • 2022-11-13
相关资源
最近更新 更多