자바에서 간단한 웹 서버를 작성하려고하지만 멈추지 않습니다. 내가 jar 파일에 모든 코드를 포장의 .jar CLASS_NAME의 인수가 서버를 시작하고 중지 칭찬 * 자바 -cp를 사용왜이 서버를 멈출 수 없습니까?
public static void main(String... args) {
args = new String[]{"stop"};
Server s = Server.getServerInstance();
s.init();
if (args.length > 0) {
for (int i = 0; i < args.length; i++) {
if (args[i].equals("start")) {
System.out.println(s);
s.start();
} else if (args[i].equals("stop")) {
System.out.println(s);
s.stop();
}
}
}
}
public class Server {
private static Server serverInstance = null;
private volatile boolean running = false;
private Thread serverthread = null;
private Server() {}
public static synchronized Server getServerInstance()
{
if(serverInstance == null)
{
serverInstance = new Server();
}
return serverInstance;
}
public void init()
{
Runnable r = new ServerThread();
serverthread = new Thread(r);
}
public void start()
{
running = true;
if(serverthread!=null)
{
serverthread.start();
}
}
public void stop()
{
running = false;
if(serverthread!=null)
{
try {
serverthread.join(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ServerThread implements Runnable
{
@Override
public void run() {
while(running)
{
//some action here...
System.out.println("RUNNING..");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
: 여기에 샘플 코드의 조각이다. 서버는 시작할 수는 있지만 중지 인수로 전달하여 중지 된 적이 없습니다. 나는 디버깅을했고, 부울 값이 결코 바뀌지 않는다는 것을 알았습니다. 왜죠? 어떻게하면 우아한 방법으로 stop 메소드를 구현할 수 있습니까? 감사 !!!!
당신이 자바를 두 번 실행하면, 그것은 완전히 새로운 공정의의를 생성을 사용하는 것이 좋습니다. stop() '호출이 첫 번째 프로세스에서 시작된 호출에 연결되지 않습니다. – Thomas
왜 '바람둥이'?? – leonbloy
시작/정지 스크립트가 필요합니다. –