次のコードでは、Javaアプレットを使用してボタンを押すとサーバーを停止しようとしています。起動はスレッドを使用してうまく動作しますが、私は、サーバーの停止を得ていないのです揮発性 variable.Stillを使用していた。..スレッドが揮発性のフラグを使用して停止していません
ここはコードです:
public class TCPServer extends Thread {
public static final int SERVERPORT = 8002;
private boolean running = false;
public volatile boolean stop = false;
public Socket client = null;
public static void main(String[] args) {
ServerBoard frame = new ServerBoard();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public void run() {
super.run();
running = true;
try {
System.out.println("Server Has Started........ \n Waiting for client........");
ServerSocket serverSocket = new ServerSocket(SERVERPORT);
try {
while (!stop && running) {
client = serverSocket.accept();
System.out.println("Connection Accepted......");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String usercmnd = in.readLine();
if (usercmnd != null) {
Runtime runtime = Runtime.getRuntime();
Process p = runtime.exec(usercmnd);
}
}
if (stop) {
serverSocket.close();
client.close();
System.out.println("Server Has Stopped");
System.exit(0);
}
} catch (Exception e) {
System.out.println("Error");
e.printStackTrace();
}
} catch (Exception e) {
System.out.println("Error");
e.printStackTrace();
}
}
public void requestStop() {
stop = true;
}
}
しかし、私はいずれも表示されないserver.Itsを停止します停止ボタンをクリックしたときに私もここに任意のエラー を示していないcode.Itsによって期待通りのコンソール上の出力は停止ボタン
stopServer = new JButton("Stop");
stopServer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
stopServer.setEnabled(false);
startServer.setEnabled(true);
mServer = new TCPServer();
mServer.requestStop();
}
});
'serverSocket.accept()'がブロックされているので停止しないと思います。 'requestStop'で' serverSocket'を閉じてみてください。 –
'stop'と' running'の違いは何ですか? –
@AndyTurnerがSocketExceptionを表示しています:ソケットが閉じているので、 –