如何在java(CVM PhoneME)中实现单实例应用程序管理器?

如何在java(CVM PhoneME)中实现单实例应用程序管理器?,java,java-me,Java,Java Me,我正在为基于CVM PhoneME VM的嵌入式平台开发应用程序管理器。VM由C++应用程序启动,该应用程序配置CVM,然后触发VM本身。这个C++应用程序被称为命令行,它传递java应用程序的主要类名和类路径。有一个主java应用程序(我们称之为Manager),它使用类加载器加载应用程序。我希望此管理器是一个单实例应用程序,以便它可以跟踪所有正在运行的应用程序 换句话说:我第一次启动应用程序(例如app1)时,VM将启动,管理器将加载app1。在加载其他应用程序(app2、app3等)的进一

我正在为基于CVM PhoneME VM的嵌入式平台开发应用程序管理器。VM由C++应用程序启动,该应用程序配置CVM,然后触发VM本身。这个C++应用程序被称为命令行,它传递java应用程序的主要类名和类路径。有一个主java应用程序(我们称之为Manager),它使用类加载器加载应用程序。我希望此管理器是一个单实例应用程序,以便它可以跟踪所有正在运行的应用程序

换句话说:我第一次启动应用程序(例如app1)时,VM将启动,管理器将加载app1。在加载其他应用程序(app2、app3等)的进一步调用中,管理器的同一实例将加载这些应用程序

除了这不是一个单独的实例之外,管理器工作正常

有可能做我想做的吗

我发现:


这几乎是我想要的一样,除了应用程序加载部分。但是,CVM实现中没有必要的包。

有多种方法可以强制执行应用程序的单个实例。例如,Firefox使用锁文件

我见过的最常见的方法之一是启动“管理器”,但在启动时,尝试在某个端口上打开一个ServerSocket以侦听连接

如果您未能打开套接字,您就知道您不是单例实例。因此,与其启动应用程序,不如连接到侦听套接字并向其发送程序参数

如果成功打开套接字,请执行启动app1时要求执行的操作,同时在另一个线程上侦听来自作为重复实例启动的管理器的传入连接


编辑:描述非ME环境中的流程。作为一名ME开发者,我不能在电话上评论它的可行性。

谢谢你的回答。这个解决方案看起来不错。我会设法试试的。你认为有可能从C++到JVM中运行的应用程序的JNI调用吗?我相信它会很好地解决这个问题,但是我不太习惯JNI。谢谢。@Marcus:其他人可以对此发表评论;到目前为止,我还没有机会使用JNI。但我对它的一般理解是,JNI调用的方向是相反的:因此Java可以调用本机代码;通常不需要其他方法。可以从JC++调用JNI到java。我在过去几天里研究过这个问题。主要的问题是无法将不同的进程附加到以前创建的VM(至少我找不到方法。你知道这是否可行吗?)。我目前的解决方案是将VM守护进程设置为守护进程。我将使用IPC(进程间通信)调用来通知守护进程新的应用程序。这一个将设法在运行的VM内进行JNI调用。我只需要定义我要使用的IPC选项。我的选择是DBUS,但它可能会改变。只是想让你知道:它工作得非常完美。我使用DBUS在进程之间交换消息。服务器使用JNI调用连接到正在运行的VM并调用必要的代码。