Сейчас у меня есть консольный клиент, который взаимодействует с сервером через ObjectInputStream.readObject()
и ObjectOutputStream.writeObject()
. Для консольного приложения это работает как есть.
Проблема в том, что класс, который имеет потоки ввода/вывода, также имеет ссылку на объект System.console()
!
Как я могу реорганизовать этот класс, чтобы он стал более обобщенным? Я почти хотел бы рассматривать соединение как утилиту или, возможно, как bean-компонент, который затем будет передан в, например, в графический интерфейс Swing или, возможно, в системную консоль.
package net.bounceme.dur.client;
import net.bounceme.dur.data.Title;
import java.net.*;
import java.io.*;
import java.util.Arrays;
import java.util.logging.Logger;
import net.bounceme.dur.data.State;
public class Client {
private static final Logger log = Logger.getLogger(Client.class.getName());
private String server = "localhost";
private int portNumber = 8080;
private final Console c = System.console();
private Client() {
}
public Client(String server, int portNumber) {
this.server = server;
this.portNumber = portNumber;
}
public void inputOutput() throws IOException, ClassNotFoundException {
Socket socket = new Socket(server, portNumber);
boolean eof = false;
Title title = null;
State state = State.undefined;
try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream())) {
do {
try {
title = (Title) objectInputStream.readObject();
log.info(title.toString());
do {
state = State.undefined;
try {
c.printf("enter the state for record:");
state = State.valueOf(c.readLine());
} catch (java.lang.IllegalArgumentException iae) {
log.warning(Arrays.deepToString(State.values()));
}
} while (state == State.undefined);
title.setState(state);
title.setTitle("modified from client");
objectOutputStream.writeObject(title);
} catch (java.io.EOFException eofe) {
eof = true;
}
} while (!eof);
}
}
}
смотрите также:
Console
вы должны либо создавать события, либо записывать содержимое в какую-то очередь, которая может быть прочитана заинтересованными сторонами, например - person MadProgrammer   schedule 09.07.2014