在Mac上多次运行Java程序
您不指定是否要启动简单的.jar或应用程序包,所以我将给出两个示例。要在OS X上运行多个应用程序包实例,可以使用以下技巧;打开终端并使用以下命令启动应用程序:
open -n /path/to/your/java.app
每次调用此命令时,都会打开一个新实例。
注意:仅仅因为可以启动多个实例并不意味着这样做是个好主意。确保您不会遇到使用同一文件对多个实例进行并发写入访问的麻烦。
如果你想运行一个罐子,你可以简单地调用
java -jar /path/to/your/java.jar
多次启动了多个实例。
从OSX下的Java应用程序中启动了Java的应用程序,你必须做这样的事情:
在简单的罐子的情况下:
File jarFile = new File("/path/to/your/jarFile.jar");
Runtime.getRuntime().exec(new String[] { "java", "-jar", jarFile.getAbsolutePath() });
在这种情况下的应用程序包:
File jarFile = new File("/path/to/your/jarFile.app");
final String[] command = { "open", "-n", jarFile.getAbsolutePath() };
Runtime.getRuntime().exec(command);
我真的不明白这个问题。但是,为什么不将它抽象为一种方法,而不是将它命名为程序并将该子程序调用两次。或者产生两个线程?
也许这是一个有趣的问题,但我会打开两个终端窗口,一旦每个终端上运行它...
它的工作方式,但由于某种原因,当你从程序内部调用程序,它不起作用 –
这取决于你的Java程序的性质。如果你的程序作为服务器和客户端运行,当你运行多个实例时它可能会导致问题。在许多服务器程序中,它使用固定的端口号来简化设置和实现。由于给定的端口号不能被多个应用程序使用,因此除非您可以更改应用程序设置中的端口号,否则无法打开该应用程序的多个实例。
许多Java应用程序使用这个技巧来阻止用户通过检查某个端口是否正在使用来打开其程序的多个实例。如果是这种情况,那么你不能运行该程序的多个实例。
对于其他不使用端口或端口的Java应用程序不会崩溃,您可以通过终端打开两次或更多。
在我的程序中,用户输入所需的端口号 –
你可以不是两次运行呢?问题是什么? – gigadot
当你双击一个应用程序图标时,它会运行程序,但是如果它已经运行,它会把你带到它的窗口>。
假设您正在系统上运行客户端版本的代码并尝试连接到主机。首先,你需要让服务器在两台机器上运行,B和C在你的情况下运行。其次,您使用的客户端代码应该是读取连接的IP地址和端口。它不应该被硬编码,否则你将不得不改变代码并重新编译服务器B.这应该对你有所帮助。
猜我已经回答了您的查询。 :)
不能从同一个jvm启动两个不同的进程,在这种情况下您应该探索ProcessBuilder。 – Scorpion
这似乎并不是在OS X上构建应用程序的正确方式。您应该做的只有一个“应用程序” - 用户界面的进程。您可以使用“帮助程序”进程在后台执行一些任务,如下载。 – millimoose
你究竟跑了两次是什么意思?一旦第一个程序结束,或者两个程序同时运行,是否需要启动第二个程序?具体来说,你试图重新创建Windows呢? – BitFiber