在 eclipse 中运行多个 java 主方法
我正在运行Eclipse 3.5,并且我经常遇到一个问题,为了测试我的程序,我必须进行大约6-7次单击,而不是单击播放按钮。
问题是我正在编写网络应用程序,因此我有一个“服务器”的运行配置和一个“客户端”的运行配置。然后为了测试我的程序,我必须启动服务器,然后是客户端,然后是另一个客户端等。是否无论如何都可以将它自动化为一个运行配置?
我正在运行Eclipse 3.5,并且我经常遇到一个问题,为了测试我的程序,我必须进行大约6-7次单击,而不是单击播放按钮。
问题是我正在编写网络应用程序,因此我有一个“服务器”的运行配置和一个“客户端”的运行配置。然后为了测试我的程序,我必须启动服务器,然后是客户端,然后是另一个客户端等。是否无论如何都可以将它自动化为一个运行配置?
您可以直接调用任何类的 main 方法。例如,如果您有 Server 和 Client 类,并且想要运行一个服务器和两个客户端,则可以执行以下操作。
public class Server {
public void main(final String ... $Args) {
final Server S = new Server();
S.config($Args);
S.run();
}
}
public class Client {
public void main(final String ... $Args) {
final Client C = new Client();
C.config($Args);
C.run();
}
}
public class Test_ServerClient {
public void main(final String ... $Args) {
Server.main('server1.cfg');
Client.main('client1.cfg');
Client.main('client2.cfg');
}
}
做!
嗯,差不多。您可能需要在调用客户端的main之前做一些延迟,以确保服务器启动并正常运行。
不过,人们会想。所有服务器和客户端将在同一个 JVM 上运行。在大多数情况下(您只想测试其交互,并且与类加载无关,因为当它们不在同一个JVM上时,它的行为会有所不同),这应该没问题。如果你真的想让它在不同的JVM上运行,你可以用Ant来运行它们。
像这样:
<project name="TestServerClient" default="test" basedir=".">
<target name="test">
<java classname="my.Server">
<arg value="server1.cfg"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
<java classname="my.Client">
<arg value="client1.cfg"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
<java classname="my.Client">
<arg value="client2.cfg"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="${java.class.path}"/>
</classpath>
</java>
</target>
</project>
所以你可以运行这只蚂蚁,就是这样。
希望这有帮助。
只需完成经过验证的答案:如果要并行执行服务器和客户端,则需要为每个客户端和服务器实例启动一个新线程。您可以按如下方式执行此操作:
pulic class Test_ServerClient {
public static void main(final String[] args) {
Thread serverThread = new Thread() {
public void run() {
Server.main(args);
}
};
Thread clientThread = new Thread() {
public void run() {
Client.main(args);
}
};
serverThread.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
clientThread.start();
}
}
public class Server {
public static void main(final String[] args) {...}
}
public class Client {
public static void main(final String[] args) {...}
}