Java 日食。当第二个电源读取前一个电源的静态磁场时,运行两个不同的电源

Java 日食。当第二个电源读取前一个电源的静态磁场时,运行两个不同的电源,java,eclipse,multithreading,run-configuration,class-instance-variables,Java,Eclipse,Multithreading,Run Configuration,Class Instance Variables,我在eclipse中有一个Java项目,它分为两部分;基本上运行两个不同线程的两个不同的主类。 其中一个包含加载、初始化和调试,显示相当慢的过程。另一个操作初始化的数据。为了检索第二部分中的信息,第一部分“保存”包含类实例的静态映射中的所有引用 是否存在只运行第一部分一次,然后再编译和运行第二部分多次的方法?我尝试设置两个不同的控制台,并在不同的时间按run按钮,但是第一个类的静态字段在第二个类运行时看起来不存在 我现在只在第二部分工作,所以我需要多次测试和启动它。我真的很感激你能帮我省下很多浪

我在eclipse中有一个Java项目,它分为两部分;基本上运行两个不同线程的两个不同的主类。 其中一个包含加载、初始化和调试,显示相当慢的过程。另一个操作初始化的数据。为了检索第二部分中的信息,第一部分“保存”包含类实例的静态映射中的所有引用

是否存在只运行第一部分一次,然后再编译和运行第二部分多次的方法?我尝试设置两个不同的控制台,并在不同的时间按run按钮,但是第一个类的静态字段在第二个类运行时看起来不存在

我现在只在第二部分工作,所以我需要多次测试和启动它。我真的很感激你能帮我省下很多浪费在初始化同样东西上的时间

ps:如果我同时运行这两个部分,一切都正常。 提前谢谢 卢卡

多亏了replay(多线程程序,Stephen C),我试图使问题更清楚,并询问如何解决它,因为我的解决方案看起来不是最好的

编辑1:“第一部分”初始化程序,然后运行一个简单的GUI,定期更新。因此,只要它出现,我们就不应该关心如何管理用户的输入和输出

编辑2:“第二部分”从上一部分读取信息,并将字符串发送回GUI以进行调试

编辑3:我在项目的形状中没有特定的约束,因此如果有更好的解决方案,我可以更改结构。以及它的运行方式

进一步的问题1:有没有可能在eclipse中只编译项目的一部分,而它同时运行?我的意思是,如果有两个线程正在运行,我可以停止一个线程,重新编译它,然后再次运行它,这样它就可以看到从第一个线程创建的实例,而第一个线程从未停止过?基本上,我需要引用内存中加载的相同静态变量(如果存在)


更进一步的问题2:或者更幸运的是,是否存在一种在文件中存储和加载Java类实例的方法,以避免将映射机制从草图写入txt文件

现在还不完全清楚你在问什么,但我假设你说的是在同一个JVM中运行“第一部分”和“第二部分”

是的,这是可能的。但这并不简单

基本上,您需要重构代码,以便有某种“控制框”,用户可以从外部与之交互。例如,这可能只是一个简单的命令循环,从标准输入读取命令并运行它们。(或者,您可以将应用程序转换为“服务”,通过RMI、HTTP等通过网络套接字接受请求。)

然后,您将事情连接起来,以便有一个“命令”来运行应用程序的“第二部分”,以响应用户的请求

这是最基本的。您要做的另一件事是“编译并[多次]运行第二部分”。这意味着您需要设置“控制框”,以便在修改和重新编译“第二部分”后,它可以加载新的代码副本。为了实现这一点,您需要创建一个新的类加载器对象(每次),并使用它来加载组成“第二部分”的类。这是可能的,但有点棘手。您需要解决的问题包括:

  • 将“第一部分”和“第二部分”拆分为单独的JAR文件(或目录树)。“第一部分”需要是独立的。。。对“第二部分”中的类没有依赖关系

  • 确保“第一部分”数据结构中没有对“第二部分”中对象/枚举实例的运行时引用

如果不正确执行上述操作,则可能会遇到“permgen”存储泄漏和神秘的类型转换错误



总而言之,要想让这一切顺利进行,还有很多工作要做。除非你已经了解了所有涉及的技术,否则我怀疑它是否能为你节省时间。更好的办法可能是找出如何加速“第一部分”的初始化;e、 g.通过延迟初始化,或者使用一些快速/轻量级的持久化机制缓存数据结构。

我认为最好更改您的设计,除非有保持不变的要求

虽然我没有要求,也没有您实际想要实现的目标,但我建议您采用以下设计: 1.App_1进行计算,然后将结果写入文件
2.App_2读取文件检查,如果不存在,则显示错误消息;否则,请阅读文件并继续…

我想我找到了一个棘手的解决方案。它是脏的,但它在eclipse调试器中本机工作

我正在调试模式下运行一个main方法,该方法创建一个作为调用者工作的线程。这将运行项目的第一部分,并等待初始化完成(请注意,第一部分并没有在这里结束,它仍然循环显示基于静态类的调试信息,该类随程序的第二部分而发展)。然后它从一个无限循环开始,它只调用我想要测试和更改的第二部分:这里还有一个断点。 现在,我可以在eclipse调试器等待断点时编写第二部分代码,然后保存它并按F8键。调试器继续运行,算法运行,然后在断点处再次停止。只需检查是否有效,最终更改某些内容,然后保存并再次按F8键,无需等待重新初始化项目的第一部分

可能这个方法必须在一段时间后重新启动,但仍然比每次重新启动更好