Java プログラムに問題があります。私はこのコードを持っています:
Host.java :
public class Host {
protected static void start(JFrame window) {
ServerSocket server = null;
try {
server = new ServerSocket();
SocketAddress addr = new InetSocketAddress(hostname, port);
server.bind(addr);
Socket socket = server.accept();
window.setVisible(false);
Thread thread = new Thread(new Incomming(socket.getInputStream()));
thread.start();
thread.join();
socket.close();
} catch (UnknownHostException e) {
[...]
}
}
Incoming.java :
public class Incomming implements Runnable {
private DataInputStream is;
public Incomming(InputStream is) {
MyFrame frame = new MyFrame();
frame.setVisible(true);
frame.pack();
this.is = new DataInputStream(is);
}
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
int n = is.readInt();
if(n == -1) {
break;
}
byte[] b = new byte[n];
is.readFully(b);
[...] // working with bytes
}
System.out.println("Stream closed.");
} catch(IOException e) {
[...]
}
}
}
Client.javaは Host.java と非常に似ており、socket.getInputStream() にも Incomming.java を使用します。
したがって、問題は次のとおりです。クライアントはホストに接続しますが、サーバー側とクライアント側でMyFrameウィンドウを表示する必要がある場合、完全にロードされません。また、古い JFrame ウィンドウ (両側) の閉じるボタンは何もしません。
で行を削除しようとするとthread.join()
、MyFrame ウィンドウが完全に読み込まれ、閉じるボタンが機能しsocket closed
ますが、メッセージで例外がスローされるため、クライアントはホストに接続されなくなります。
この問題を解決するにはどうすればよいですか? 返信ありがとうございます。