2012-08-01 4 views
3

토글 버튼을 눌렀을 때 시작하고자하는 WebServerService이 있습니다. 동일한 버튼은 대화 상자를 시작하고 사용자에게 알립니다.안드로이드 웹 서버 서비스를 시작하는 방법은 무엇입니까?

startService(new Intent(MyActivity.this, WebServerService.class)); 

그러나 응용 프로그램 UI가 정지하고 대화 상자가 표시 및 응용 프로그램 강제 폐쇄하지 않습니다

내 주요 활동에서 다음 코드를 시도했습니다. WebServerService 클래스의 코드는 다음과 같습니다 내가 얻기 위해 열심히 노력하고있다

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.util.Log; 

public class WebServerService extends Service { 
    private WebServer server = null; 

    @Override 
    public void onCreate() { 
     Log.i("HTTPSERVICE", "Creating and starting httpService"); 
     super.onCreate(); 
     server = new WebServer(this); 
     server.startServer(); 
    } 

    @Override 
    public void onDestroy() { 
     Log.i("HTTPSERVICE", "Destroying httpService"); 
     server.stopServer(); 
     super.onDestroy(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

이 작동 할 수 있습니다. 나는 또한 AsyncTask을 보았습니다. 그러나 그것이 제 경우에 해당되는지 확실하지 않습니다. 올바른 방향으로 어떤 도움이나 포인터를 주시면 감사하겠습니다. 다음과 같이

웹 서버 클래스는 다음과 같습니다

package com.xlnc.webapp; 
import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.net.SocketException; 

import org.apache.http.HttpException; 
import org.apache.http.impl.DefaultConnectionReuseStrategy; 
import org.apache.http.impl.DefaultHttpResponseFactory; 
import org.apache.http.impl.DefaultHttpServerConnection; 
import org.apache.http.params.BasicHttpParams; 
import org.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.BasicHttpProcessor; 
import org.apache.http.protocol.HttpRequestHandlerRegistry; 
import org.apache.http.protocol.HttpService; 
import org.apache.http.protocol.ResponseConnControl; 
import org.apache.http.protocol.ResponseContent; 
import org.apache.http.protocol.ResponseDate; 
import org.apache.http.protocol.ResponseServer; 

import android.content.Context; 

public class WebServer { 

public static boolean RUNNING = false; 
public static int serverPort = 8080; 

private static final String ALL_PATTERN = "*"; 
private static final String EXCEL_PATTERN = "/*.xls"; 
private static final String HOME_PATTERN = "/home.html"; 

private Context context = null; 

private BasicHttpProcessor httpproc = null; 
private BasicHttpContext httpContext = null; 
private HttpService httpService = null; 
private HttpRequestHandlerRegistry registry = null; 

public WebServer(Context context) { 
    this.setContext(context); 

    httpproc = new BasicHttpProcessor(); 
    httpContext = new BasicHttpContext(); 

    httpproc.addInterceptor(new ResponseDate()); 
    httpproc.addInterceptor(new ResponseServer()); 
    httpproc.addInterceptor(new ResponseContent()); 
    httpproc.addInterceptor(new ResponseConnControl()); 

    httpService = new HttpService(httpproc, 
     new DefaultConnectionReuseStrategy(), new DefaultHttpResponseFactory()); 

    registry = new HttpRequestHandlerRegistry(); 

    registry.register(HOME_PATTERN, new HomeCommandHandler(context)); 

    httpService.setHandlerResolver(registry); 
} 

private ServerSocket serverSocket; 

public void runServer() { 
    try { 
     serverSocket = new ServerSocket(serverPort); 

     serverSocket.setReuseAddress(true); 

     while (RUNNING) { 
      try { 
       final Socket socket = serverSocket.accept(); 

       DefaultHttpServerConnection serverConnection = new DefaultHttpServerConnection(); 

       serverConnection.bind(socket, new BasicHttpParams()); 

       httpService.handleRequest(serverConnection, httpContext); 

       serverConnection.shutdown(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (HttpException e) { 
       e.printStackTrace(); 
      } 
     } 

     serverSocket.close(); 
    } catch (SocketException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    RUNNING = false; 
} 

public synchronized void startServer() { 
    RUNNING = true; 
    runServer(); 
} 

public synchronized void stopServer() { 
    RUNNING = false; 
    if (serverSocket != null) { 
     try { 
      serverSocket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public void setContext(Context context) { 
    this.context = context; 
} 

public Context getContext() { 
    return context; 
} 
} 


편집 다음은 있습니다 로그 :

08-01 22:55:04.406: I/PackageManager(65): /data/app/vmdl40565.tmp changed; unpacking 
08-01 22:55:04.550: D/installd(31): DexInv: --- BEGIN '/data/app/vmdl40565.tmp' --- 
08-01 22:55:04.637: D/dalvikvm(143): GC freed 2787 objects/185600 bytes in 239ms 
08-01 22:55:05.226: D/dalvikvm(205): DexOpt: load 39ms, verify 132ms, opt 1ms 
08-01 22:55:05.236: D/installd(31): DexInv: --- END '/data/app/vmdl40565.tmp' (success) --- 
08-01 22:55:05.526: I/installd(31): move /data/dalvik-cache/[email protected]@[email protected] -> /data/dalvik-cache/[email protected]@[email protected] 
08-01 22:55:05.526: D/PackageManager(65): New package installed in /data/app/com.xlnc.webapp.apk 
08-01 22:55:05.696: D/MountListener(65): handleEvent ums_disabled 
08-01 22:55:05.756: D/MountListener(65): handleEvent ums_disconnected 
08-01 22:55:05.766: D/AndroidRuntime(162): Shutting down VM 
08-01 22:55:05.766: D/dalvikvm(162): DestroyJavaVM waiting for non-daemon threads to exit 
08-01 22:55:05.766: D/dalvikvm(162): DestroyJavaVM shutting VM down 
08-01 22:55:05.776: D/dalvikvm(162): HeapWorker thread shutting down 
08-01 22:55:05.776: D/dalvikvm(162): HeapWorker thread has shut down 
08-01 22:55:05.776: D/jdwp(162): JDWP shutting down net... 
08-01 22:55:05.776: I/jdwp(162): adbd disconnected 
08-01 22:55:05.789: D/dalvikvm(162): VM cleaning up 
08-01 22:55:05.826: E/AndroidRuntime(162): ERROR: thread attach failed 
08-01 22:55:05.826: D/dalvikvm(162): LinearAlloc 0x0 used 621708 of 5242880 (11%) 
08-01 22:55:06.396: D/dalvikvm(65): GC freed 4364 objects/319160 bytes in 245ms 
08-01 22:55:06.596: D/MediaScannerService(179): start scanning volume internal 
08-01 22:55:06.716: I/ActivityManager(65): Start proc com.android.mms for broadcast com.android.mms/.transaction.MmsSystemEventReceiver: pid=212 uid=10014 gids={3003, 1015} 
08-01 22:55:07.306: D/installd(31): DexInv: --- BEGIN '/system/app/Mms.apk' --- 
08-01 22:55:07.476: D/AndroidRuntime(210): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 
08-01 22:55:07.496: W/ResourceType(65): Resources don't contain package for resource number 0x7f0700e5 
08-01 22:55:07.496: D/AndroidRuntime(210): CheckJNI is ON 
08-01 22:55:07.508: W/ResourceType(65): Resources don't contain package for resource number 0x7f020031 
08-01 22:55:07.508: W/ResourceType(65): Resources don't contain package for resource number 0x7f020030 
08-01 22:55:07.508: W/ResourceType(65): Resources don't contain package for resource number 0x7f050000 
08-01 22:55:07.516: W/ResourceType(65): Resources don't contain package for resource number 0x7f060000 
08-01 22:55:07.667: W/ResourceType(65): Resources don't contain package for resource number 0x7f060001 
08-01 22:55:08.236: D/AndroidRuntime(210): --- registering native functions --- 
08-01 22:55:10.246: I/MediaProvider(179): Upgrading media database from version 0 to 78, which will destroy all old data 
08-01 22:55:10.656: D/dalvikvm(219): DexOpt: load 677ms, verify 1526ms, opt 36ms 
08-01 22:55:10.746: D/installd(31): DexInv: --- END '/system/app/Mms.apk' (success) --- 
08-01 22:55:10.757: I/ActivityManager(65): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.xlnc.webapp/.WirelessDropActivity } 
08-01 22:55:10.827: D/AndroidRuntime(210): Shutting down VM 
08-01 22:55:10.827: D/dalvikvm(210): DestroyJavaVM waiting for non-daemon threads to exit 
08-01 22:55:10.836: D/dalvikvm(210): DestroyJavaVM shutting VM down 
08-01 22:55:10.836: D/dalvikvm(210): HeapWorker thread shutting down 
08-01 22:55:10.836: D/dalvikvm(210): HeapWorker thread has shut down 
08-01 22:55:10.836: D/jdwp(210): JDWP shutting down net... 
08-01 22:55:10.836: I/jdwp(210): adbd disconnected 
08-01 22:55:10.836: D/dalvikvm(210): VM cleaning up 
08-01 22:55:10.916: E/AndroidRuntime(210): ERROR: thread attach failed 
08-01 22:55:10.927: D/dalvikvm(210): LinearAlloc 0x0 used 637292 of 5242880 (12%) 
08-01 22:55:11.076: I/ActivityManager(65): Start proc com.xlnc.webapp for activity com.xlnc.webapp/.WirelessDropActivity: pid=227 uid=10024 gids={3003} 
08-01 22:55:11.746: D/(212): unable to unlink '/data/data/com.android.mms/shared_prefs/com.android.mms_preferences.xml.bak': No such file or directory (errno=2) 
08-01 22:55:11.746: I/dalvikvm(165): Debugger has detached; object registry had 1 entries 
08-01 22:55:11.756: D/(212): unable to unlink '/data/data/com.android.mms/shared_prefs/_has_set_default_values.xml.bak': No such file or directory (errno=2) 
08-01 22:55:11.926: I/ARMAssembler(65): generated scanline__00000177:03515104_00000001_00000000 [ 73 ipp] (95 ins) at [0x3e1138:0x3e12b4] in 1170007 ns 
08-01 22:55:12.026: I/ARMAssembler(65): generated scanline__00000077:03545404_00000004_00000000 [ 47 ipp] (67 ins) at [0x44e5b8:0x44e6c4] in 585431 ns 
08-01 22:55:12.486: D/ddm-heap(212): Got feature list request 
08-01 22:55:12.597: D/ddm-heap(227): Got feature list request 
08-01 22:55:12.666: D/ddm-heap(165): Got feature list request 
08-01 22:55:13.176: D/ddm-heap(179): Got feature list request 
08-01 22:55:13.227: I/ActivityManager(65): Displayed activity com.xlnc.webapp/.WirelessDropActivity: 2203 ms (total 2203 ms) 
08-01 22:55:13.346: I/ARMAssembler(65): generated scanline__00000077:03545404_00000A04_00000000 [ 29 ipp] (51 ins) at [0x437570:0x43763c] in 411860 ns 
08-01 22:55:13.776: D/(165): unable to unlink '/data/data/com.android.alarmclock/shared_prefs/AlarmClock.xml.bak': No such file or directory (errno=2) 
08-01 22:55:13.808: W/BackupManagerService(65): dataChanged but no participant pkg='com.android.providers.settings' uid=10017 
08-01 22:55:13.877: W/BackupManagerService(65): dataChanged but no participant pkg='com.android.providers.settings' uid=10017 
08-01 22:55:13.916: I/ActivityManager(65): Start proc com.android.email for broadcast com.android.email/com.android.exchange.BootReceiver: pid=240 uid=10023 gids={3003, 1015} 
08-01 22:55:14.126: D/ddm-heap(240): Got feature list request 
08-01 22:55:14.176: D/dalvikvm(29): GC freed 276 objects/10576 bytes in 266ms 
08-01 22:55:14.309: D/installd(31): DexInv: --- BEGIN '/system/app/Email.apk' --- 
08-01 22:55:14.346: D/dalvikvm(29): GC freed 45 objects/2000 bytes in 164ms 
08-01 22:55:14.487: D/dalvikvm(29): GC freed 2 objects/48 bytes in 139ms 
08-01 22:55:17.596: D/dalvikvm(246): DexOpt: load 283ms, verify 2203ms, opt 85ms 
08-01 22:55:17.665: D/installd(31): DexInv: --- END '/system/app/Email.apk' (success) --- 
08-01 22:55:17.806: I/ActivityThread(240): Publishing provider com.android.email.provider: com.android.email.provider.EmailProvider 
08-01 22:55:17.866: I/ActivityThread(240): Publishing provider com.android.email.attachmentprovider: com.android.email.provider.AttachmentProvider 
08-01 22:55:18.036: D/Exchange(240): BootReceiver onReceive 
08-01 22:55:18.086: D/EAS SyncManager(240): !!! EAS SyncManager, onCreate 
08-01 22:55:18.456: D/EAS SyncManager(240): !!! EAS SyncManager, onStartCommand 
08-01 22:55:18.586: D/EAS SyncManager(240): !!! EAS SyncManager, stopping self 
08-01 22:55:19.186: I/ActivityManager(65): Start proc com.svox.pico for broadcast com.svox.pico/.VoiceDataInstallerReceiver: pid=252 uid=10012 gids={} 
08-01 22:55:19.386: D/ddm-heap(252): Got feature list request 
08-01 22:55:19.416: D/Eas Debug(240): Logging: 
08-01 22:55:19.456: D/installd(31): DexInv: --- BEGIN '/system/app/PicoTts.apk' --- 
08-01 22:55:19.736: D/dalvikvm(258): DexOpt: load 40ms, verify 22ms, opt 1ms 
08-01 22:55:19.736: D/installd(31): DexInv: --- END '/system/app/PicoTts.apk' (success) --- 
08-01 22:55:19.821: D/EAS SyncManager(240): !!! EAS SyncManager, onDestroy 
08-01 22:55:19.947: D/MediaScanner(179): opendir /system/media/ failed, errno: 2 
08-01 22:55:19.966: D/MediaScanner(179): prescan time: 12539ms 
08-01 22:55:19.980: D/MediaScanner(179):  scan time: 48ms 
08-01 22:55:19.980: D/MediaScanner(179): postscan time: 1ms 
08-01 22:55:19.980: D/MediaScanner(179): total time: 12588ms 
08-01 22:55:20.124: D/MediaScannerService(179): done scanning volume internal 
08-01 22:55:23.136: I/Notification(227): show Notification Entered 
08-01 22:55:23.546: I/HTTPSERVICE(227): Creating and starting httpService 
08-01 22:55:28.896: W/ResourceType(65): Resources don't contain package for resource number 0x7f0700e5 
08-01 22:55:28.896: W/ResourceType(65): Resources don't contain package for resource number 0x7f020031 
08-01 22:55:28.896: W/ResourceType(65): Resources don't contain package for resource number 0x7f020030 
08-01 22:55:28.896: W/ResourceType(65): Resources don't contain package for resource number 0x7f050000 
08-01 22:55:28.987: W/ResourceType(65): Resources don't contain package for resource number 0x7f060000 
08-01 22:55:28.987: W/ResourceType(65): Resources don't contain package for resource number 0x7f060001 
08-01 22:55:59.739: W/WindowManager(65): Key dispatching timed out sending to Service Started 
08-01 22:55:59.739: W/WindowManager(65): Dispatch state: null 
08-01 22:55:59.746: W/WindowManager(65): Current state: {{null to Window{44e51758 Service Started paused=false} @ 1343861759751 lw=Window{44e51758 Service Started paused=false} [email protected] fin=false gfw=true ed=true tts=0 wf=false fp=false mcf=Window{44e51758 Service Started paused=false}}} 
08-01 22:55:59.816: I/ActivityManager(65): ANR in process: com.xlnc.webapp (last in com.xlnc.webapp) 
08-01 22:55:59.816: I/ActivityManager(65): Annotation: keyDispatchingTimedOut 
08-01 22:55:59.816: I/ActivityManager(65): CPU usage: 
08-01 22:55:59.816: I/ActivityManager(65): Load: 1.45/0.77/0.29 
08-01 22:55:59.816: I/ActivityManager(65): CPU usage from 30971ms to 54ms ago: 
08-01 22:55:59.816: I/ActivityManager(65): system_server: 4% = 2% user + 1% kernel/faults: 24 minor 
08-01 22:55:59.816: I/ActivityManager(65): com.svox.pico: 1% = 0% user + 0% kernel/faults: 2607 minor 
08-01 22:55:59.816: I/ActivityManager(65): d.process.acore: 0% = 0% user + 0% kernel/faults: 3 minor 
08-01 22:55:59.816: I/ActivityManager(65): m.android.phone: 0% = 0% user + 0% kernel/faults: 1 minor 
08-01 22:55:59.816: I/ActivityManager(65): qemud: 0% = 0% user + 0% kernel 
08-01 22:55:59.816: I/ActivityManager(65): adbd: 0% = 0% user + 0% kernel 
08-01 22:55:59.816: I/ActivityManager(65): com.xlnc.webapp: 0% = 0% user + 0% kernel 
08-01 22:55:59.816: I/ActivityManager(65): pdflush: 0% = 0% user + 0% kernel 
08-01 22:55:59.816: I/ActivityManager(65): logcat: 0% = 0% user + 0% kernel 
08-01 22:55:59.816: I/ActivityManager(65): TOTAL: 5% = 3% user + 1% kernel 
08-01 22:55:59.816: I/Process(65): Sending signal. PID: 227 SIG: 3 
08-01 22:55:59.816: I/dalvikvm(227): threadid=7: reacting to signal 3 
08-01 22:55:59.836: I/dalvikvm(227): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:00.069: I/Process(65): Sending signal. PID: 65 SIG: 3 
08-01 22:56:00.069: I/dalvikvm(65): threadid=7: reacting to signal 3 
08-01 22:56:00.146: I/dalvikvm(65): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:00.413: I/Process(65): Sending signal. PID: 252 SIG: 3 
08-01 22:56:00.413: I/dalvikvm(252): threadid=7: reacting to signal 3 
08-01 22:56:00.436: I/dalvikvm(252): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:00.655: I/Process(65): Sending signal. PID: 240 SIG: 3 
08-01 22:56:00.655: I/dalvikvm(240): threadid=7: reacting to signal 3 
08-01 22:56:00.676: I/dalvikvm(240): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:00.886: I/Process(65): Sending signal. PID: 165 SIG: 3 
08-01 22:56:00.886: I/dalvikvm(165): threadid=7: reacting to signal 3 
08-01 22:56:00.906: I/dalvikvm(165): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:01.142: I/Process(65): Sending signal. PID: 212 SIG: 3 
08-01 22:56:01.142: I/dalvikvm(212): threadid=7: reacting to signal 3 
08-01 22:56:01.256: I/dalvikvm(212): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:01.397: I/Process(65): Sending signal. PID: 179 SIG: 3 
08-01 22:56:01.397: I/dalvikvm(179): threadid=7: reacting to signal 3 
08-01 22:56:01.418: I/dalvikvm(179): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:01.630: I/Process(65): Sending signal. PID: 118 SIG: 3 
08-01 22:56:01.630: I/dalvikvm(118): threadid=7: reacting to signal 3 
08-01 22:56:01.716: I/dalvikvm(118): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:01.859: I/Process(65): Sending signal. PID: 143 SIG: 3 
08-01 22:56:01.859: I/dalvikvm(143): threadid=7: reacting to signal 3 
08-01 22:56:01.877: I/dalvikvm(143): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:02.135: I/Process(65): Sending signal. PID: 116 SIG: 3 
08-01 22:56:02.135: I/dalvikvm(116): threadid=7: reacting to signal 3 
08-01 22:56:02.176: I/dalvikvm(116): Wrote stack trace to '/data/anr/traces.txt' 
08-01 22:56:02.406: W/WindowManager(65): No window to dispatch pointer action 1 
08-01 22:56:02.476: W/WindowManager(65): No window to dispatch pointer action 1 
08-01 22:56:02.646: I/ARMAssembler(65): generated scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x480dd8:0x480e94] in 473574 ns 
08-01 22:56:02.769: I/ARMAssembler(65): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x480e98:0x481060] in 786862 ns 
08-01 22:56:05.066: I/ActivityManager(65): Killing process com.xlnc.webapp (pid=227) at user's request 
08-01 22:56:05.086: I/Process(65): Sending signal. PID: 227 SIG: 9 
08-01 22:56:05.226: I/ActivityManager(65): Process com.xlnc.webapp (pid 227) has died. 
08-01 22:56:05.226: W/ActivityManager(65): Scheduling restart of crashed service com.xlnc.webapp/.WebServerService in 83846ms 
08-01 22:56:05.236: I/WindowManager(65): WIN DEATH: Window{44e72108 com.xlnc.webapp/com.xlnc.webapp.WirelessDropActivity paused=false} 
08-01 22:56:05.236: I/WindowManager(65): WIN DEATH: Window{44e51758 Service Started paused=false} 
08-01 22:56:05.346: E/gralloc(65): [unregister] handle 0x4811e8 still locked (state=40000001) 
08-01 22:56:05.367: I/UsageStats(65): Unexpected resume of com.android.launcher while already resumed in com.xlnc.webapp 
08-01 22:56:05.637: W/InputManagerService(65): Got RemoteException sending setActive(false) notification to pid 227 uid 10024 
08-01 22:56:05.676: E/ActivityThread(65): Failed to find provider info for android.server.checkin 
08-01 22:56:05.687: W/Checkin(65): Can't log event SYSTEM_SERVICE_LOOPING: java.lang.IllegalArgumentException: Unknown URL content://android.server.checkin/events 
+0

[logcat] (http://developer.android.com/tools/help/logcat.html)을 게시 할 수 있다면 좋을 것입니다. 내 생각에 한 가지 안드로이드 3.x에서 시작, 당신은 메인 UI 스레드 내부 인터넷에 어떤 연결을 만들 수 없습니다. 만약 당신이'WebServer' 클래스에 대한 정보를 제공 할 수 있다면. –

+0

안녕하세요, 의 튜토리얼을 따라이 특정 애플리케이션에 sdk 7을 사용하고 있습니다. 요청에 따라 logcat을 첨부하십시오. 보길 원하는 것이 있거나보고 싶다면 알려주세요. 감사합니다. – kalz

+0

소스에 대한 링크를 제공해 주셔서 감사합니다. 로그에 관해서는 한 줄 밖에 없으므로 뭔가를 추측하기가 어렵습니다. 빠른 트릭을 시도해 볼 수 있습니다 :'adb logcat -c'는 로그를 지우고, app을 닫고,'adb logcat -d'는 새로운 로그를 덤프합니까? –

답변

3

서비스의에서 onCreate()는 GUI 스레드에서 호출됩니다. GUI 스레드에서 전체 웹 서버를 실행하려고합니다. 반환하지 않지만 WebServer.runServer()에서 "영원히"끝납니다. "긴"실행중인 작업의 경우 GUI 스레드를 차단하지 않으려면이를 새 비 GUI 스레드에 넣어야합니다.

스레드 클래스는 스레드를 취소하는 기능을 제공하기도하여 선택() 및 대기중인 다른 것들에 대해 쉽게 catch 가능한 InteruptedException을 던집니다. 잠재적으로 위험한 STATIC "running"플래그가 필요하지 않습니다. 항상 모든 종류의 정적 데이터를 해결하십시오.

+0

니스. 게다가'WebServer'는'Thread' /'Runnable'이 아닙니다. @ kalz는 스레드/실행 가능 파일로 이동하는 것을 고려해야합니다. –

+0

전체 코드에는 정리가 필요합니다. try/catch에는 runServer() 코드에서 뒤에서 정리하기위한 finally 블록이 있다는 것을 기억하십시오. stopServer()는 다른 곳에서 필요로하는 소켓을 절대로 닫지 말고 서버 스레드를 알 수없는 상태로 두어야합니다. 실행중인 서버 스레드를 "stop, pls"로 게시하면됩니다. 그 모든 것들에 대해서는 제거 제거 pls를 제거하십시오. 내부의 Exception으로 인해 WebServer 자체가 중지 된 상태에서 WebServerService가 실행 중일 때 잘못된 상태가 발생할 수도 있습니다. 해결해야합니다 (활동에 알림 보내기). – Oliver

+0

@SheIs_LeThiCongNhan : 정확히 내 대답을 진술했다. – Oliver

관련 문제