我需要您对创建可作为服务运行的 Java 应用程序的建议。我正在使用 Java 服务包装器在 Windows 中将其作为服务安装和运行。我有 2 个类 ServiceApp.java 和 RMIService.java。ServiceApp 有 main 方法,RMIService 将是一个运行以接受来自客户端的连接的服务器。
现在这是我的问题。在我的 main 方法中,一旦我创建了 RMIService,主线程就会退出并且应用程序会停止,这是正确的。由于我想阻止主线程将其作为服务运行,我创建了一个 SocketServer 和 Socket 对象并调用了 Socket.accept()。这工作正常,服务正在运行,因为主线程被阻塞,但我不相信这是正确的方法。请为我提供正确的方法来做到这一点。这是一个代码片段:
public class ServiceApp {
public static void main(String[] args) {
System.out.println("Starting RMI server");
{
RMIService rmiService;
try {
rmiService = new RemoteServerService();
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("RMIServer", rmiService);
System.out.println("RMI server running");
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket( 7000 );
while ( true )
{
socket = serverSocket.accept(); //This will block the main thread
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try {
if (socket != null)
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
PS:我已经在 Stackoverflow 上搜索了这些问题,但找不到符合我要求的任何内容。