Итак, я новичок в Java RMI и создаю графический интерфейс, но RMI работает. Теперь у меня есть класс Interface с именем MessageService, класс Server с именем MessageServer и класс Client с именем MessageClient. Я хотел бы сделать графический интерфейс с полем, где я могу написать сообщение, которое затем будет отображаться на стороне сервера. Как это достигается?
РЕДАКТИРОВАТЬ: Я сейчас сделал какой-то графический интерфейс. Я также добавил функцию на сервер. Я также отредактировал код клиента, чтобы при запуске он запускал мой класс графического интерфейса.
Как бы я это реализовал, чтобы я мог писать текст в поле ввода, и при отправке он будет виден на сервере?
Вот код для GUI:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class TheGUI extends Application{
Button sendButton;
TextField input;
public static void main(String[] args) throws RemoteException, NotBoundException {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("GUI");
input = new TextField();
sendButton = new Button();
sendButton.setText("send");
AnchorPane layout = new AnchorPane();
HBox hbox = new HBox(5, input, sendButton);
layout.getChildren().addAll(hbox);
AnchorPane.setTopAnchor(hbox, 10d);
EventHandler<ActionEvent> event = new EventHandler<ActionEvent>() {
public void handle(ActionEvent e)
{
String message = input.getText();
input.setText("");
}
};
input.setOnAction(event);
sendButton.setOnAction(event);
Scene scene = new Scene(layout, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
}
}
Это мой отредактированный интерфейс:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MessageService extends Remote {
public void newMessage (String clientID, String message) throws RemoteException;
}
Это мой отредактированный класс сервера:
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
public class MessageServer extends UnicastRemoteObject implements MessageService {
protected MessageServer() throws RemoteException {
super();
}
@Override
public void newMessage(String clientID, String message) throws RemoteException {
System.out.println(clientID + " " + message);
}
public static void main (String[] argv)
{
try
{
Registry registry = LocateRegistry.getRegistry(1099);
MessageServer messageServer = new MessageServer();
registry.rebind("MessageService", messageServer); //register with naming service(bind with registry)
System.out.println("Server is Ready");
}
catch (RemoteException e)
{
System.out.println("ERROR: Could not create registry");
e.printStackTrace();
}
}
}
Это мой отредактированный класс клиента:
import javafx.application.Application;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class MessageClient
{
public static void main (String[] argv) throws RemoteException, NotBoundException {
try
{
Registry registry = LocateRegistry.getRegistry("127.0.0.1");
MessageService messageService= (MessageService) registry.lookup("MessageService");
Application.launch(TheGUI.class);
}
catch (Exception e)
{
System.out.println ("MessageClient exception: " + e);
}
}
}