2017-10-24 15 views
0

저는 자바로 내 첫 번째 서버/클라이언트 프로젝트를 만들고 있습니다. 그것은 여전히 ​​매우 기본이고 나는 서버와 클라이언트 프로그램간에 데이터를 교환 할 수있었습니다. 이제 클라이언트가 Connection을 종료하면 다시 연결하는 데 문제가 있습니다.Java 서버의 주요 기능을 다시 시작하십시오.

저는 Visual Basic에서 어디서 타이머와 부울이 있었는지 확인하고 Connection이 설정되었는지 확인하고 결국 소켓을 재설정합니다.

자바에서 Start 메소드와 Restart 메소드를 설정하고 Loop 상태를 확인하는 것과 비슷한 것을 시도했다.

이클립스는 비 정적 필드에 대한 정적 참조를 만들 수 없다는 메시지를 계속 제공합니다. 이제 나는 완전히 잃어 버렸어.

다음은 잘 작동하지만 다시 시작할 수없는 서버 코드입니다.

package ComplexChatServer; 

public class MainRoutine { 
    public Boolean boIsRunning; 
    public ConnectionHandlerS chsEins; 
    public Boolean boConnected = false; 
    public String strText; 

    public void StartRunning() { 
     boIsRunning = true; 
     chsEins = new ConnectionHandlerS(); 
     chsEins.SocketListener(); 
    } 

    public void ContinueRunning() { 
     boConnected = chsEins.getClientStatus(); 

     if (boConnected == true) { 
      //System.out.println("Connected"); 
      strText = null; 
      strText = chsEins.ReadInput(); 

      if (strText != null && strText.isEmpty() == false) { 
       System.out.println("Loop"); 
       System.out.println(strText); 
       strText = ""; 
       boIsRunning = true; 
      } 
      else if (strText.equalsIgnoreCase("+++END+++")) { 
       boIsRunning = false; 
       System.exit(0); 
      } 
     } 
     else { 
      //System.out.println("Not connected"); 
     } 

    } 

    public static void main (String [] args) { 
     int intRun; 

     while (true) { 
      if (boIsRunning = true) { 
       intRun = 1; 
      } 
      else { 
       intRun = 0; 
      } 

      switch (intRun) { 
      case 0: 
       StartRunning(); 
       break; 
      case 1: 
       ContinueRunning(); 
       break; 
      } 
     } 
    } 
} 
+0

항상 true로 평가되기 때문에'if (boIsRunning = true) '실수를 보았습니다 ('=='또는'if (boIsRunning) ...') – moffeltje

+1

왜 당신은 System .exit (0)? 프로세스를 완전히 종료하고 응용 프로그램을 다시 시작해야합니다. –

+0

또한 자바에서는 소문자로 메소드를 시작하는 것이 일반적입니다. – moffeltje

답변

1

정적이 아닌 구성원을 정적 호출 할 수 없습니다. Java의 정적 멤버는 클래스 자체에 속한 멤버입니다. 그것의 객체에 속하지 않습니다. 따라서 MainRoutine 객체를 인스턴스화하고 메서드를 호출하거나 기존 메서드를 정적 메서드로 변환하여 이미 정적 main 메서드에서 호출 할 수 있어야합니다. 당신이 달성하기를 원하는 것에 따라.

게다가 자바 커뮤니티는 메소드와 변수의 이름을 지정할 때 낙타 케이스를 사용합니다. @ 빌 바스는 그의 의견에 명시된 바와 같이

public static void main (String [] args) { 
    MainRoutine routine = new MainRoutine(); 

    while(true) { 
     if(boIsRunning) { 
      routine.continueRunning(); 
     } else { 
      routine.startRunning(); 
     }  
    } 
} 

는 또한, 당신은 실제로 그것을 다시 시작하기보다는 과정을 종료하고 있다는주의 사항 : 아래의 구문과 논리적 보정을 확인하시기 바랍니다.