2011-11-30 68 views
0

这是我的服务器端代码片段。并且对android编程新手我无法修复由LogCat显示的错误消息。我的应用程序意外崩溃,我正在使用模拟器。请帮我或建议我如何解决这些错误。谢谢!线程退出与Android套接字编程中未捕获的异常

package server.activity; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.InetAddress; 
import java.net.NetworkInterface; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.net.SocketException; 
import java.util.Enumeration; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.util.Log; 
import android.widget.TextView; 

public class ServerActivity extends Activity { 

    private TextView serverStatus; 

    // default ip 
    public static String SERVERIP = ""; 

    // designate a port 
    public static final int SERVERPORT = 1234; 

    private Handler handler = new Handler(); 

    private ServerSocket serverSocket; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.server); 
     serverStatus = (TextView) findViewById(R.id.server_status); 

     SERVERIP = getLocalIpAddress(); 

     Thread fst = new Thread(new ServerThread()); 
     fst.start(); 
    } 

    public class ServerThread implements Runnable { 

     public void run() { 
      try { 
       if (SERVERIP != null) { 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          serverStatus.setText("Listening on IP: " + SERVERIP); 
         } 
        }); 
        serverSocket = new ServerSocket(SERVERPORT); 
        while (true) { 
         // listen for incoming clients 
         Socket client = serverSocket.accept(); 
         handler.post(new Runnable() { 
          @Override 
          public void run() { 
           serverStatus.setText("Connected."); 
          } 
         }); 

         try { 
          BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
          String line = null; 
          while ((line = in.readLine()) != null) { 
           Log.d("ServerActivity", line); 
           handler.post(new Runnable() { 
            @Override 
            public void run() { 
             // do whatever you want to the front end 
             // this is where you can be creative 
            } 
           }); 
          } 
          break; 
         } catch (Exception e) { 
          handler.post(new Runnable() { 
           @Override 
           public void run() { 
            serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones."); 
           } 
          }); 
          e.printStackTrace(); 
         } 
        } 
       } else { 
        handler.post(new Runnable() { 
         @Override 
         public void run() { 
          serverStatus.setText("Couldn't detect internet connection."); 
         } 
        }); 
       } 
      } catch (Exception e) { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         serverStatus.setText("Error"); 
        } 
       }); 
       e.printStackTrace(); 
      } 
     } 
    } 

    // gets the ip address of your phone's network 
    private String getLocalIpAddress() { 
     try { 
      for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
       NetworkInterface intf = en.nextElement(); 
       for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
        InetAddress inetAddress = enumIpAddr.nextElement(); 
        if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } 
       } 
      } 
     } catch (SocketException ex) { 
      Log.e("ServerActivity", ex.toString()); 
     } 
     return null; 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     try { 
      // make sure you close the socket upon exiting 
      serverSocket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

这是从logcat的

11-29 19:33:36.051: D/AndroidRuntime(571): Shutting down VM 
11-29 19:33:36.059: W/dalvikvm(571): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
11-29 19:33:36.070: E/AndroidRuntime(571): Uncaught handler: thread main exiting due to uncaught exception 
11-29 19:33:36.122: E/AndroidRuntime(571): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{server.activity/server.activity.ServerActivityActivity}: java.lang.ClassNotFoundException: server.activity.ServerActivityActivity in loader [email protected] 
11-29 19:33:36.122: E/AndroidRuntime(571): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) 
11-29 19:33:36.122: E/AndroidRuntime(571): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
11-29 19:33:36.122: E/AndroidRuntime(571): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
11-29 19:33:36.122: E/AndroidRuntime(571): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
11-29 19:33:36.122: E/AndroidRuntime(571): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-29 19:33:36.122: E/AndroidRuntime(571): at android.os.Looper.loop(Looper.java:123) 
11-29 19:33:36.122: E/AndroidRuntime(571): at android.app.ActivityThread.main(ActivityThread.java:4363) 
11-29 19:33:36.122: E/AndroidRuntime(571): at java.lang.reflect.Method.invokeNative(Native Method) 
11-29 19:33:36.122: E/AndroidRuntime(571): at java.lang.reflect.Method.invoke(Method.java:521) 
11-29 19:33:36.122: E/AndroidRuntime(571): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
11-29 19:33:36.122: E/AndroidRuntime(571): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
11-29 19:33:36.122: E/AndroidRuntime(571): at dalvik.system.NativeStart.main(Native Method) 
11-29 19:33:36.122: E/AndroidRuntime(571): Caused by: java.lang.ClassNotFoundException: server.activity.ServerActivityActivity in loader [email protected] 
11-29 19:33:36.122: E/AndroidRuntime(571): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
11-29 19:33:36.122: E/AndroidRuntime(571): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
11-29 19:33:36.122: E/AndroidRuntime(571): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
11-29 19:33:36.122: E/AndroidRuntime(571): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
11-29 19:33:36.122: E/AndroidRuntime(571): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409) 
11-29 19:33:36.122: E/AndroidRuntime(571): ... 11 more 
11-29 19:33:36.230: I/dalvikvm(571): threadid=7: reacting to signal 3 
11-29 19:33:36.857: I/dalvikvm(571): Wrote stack trace to '/data/anr/traces.txt' 
11-29 19:33:46.360: I/Process(571): Sending signal. PID: 571 SIG: 9 

回答

0

检查启动您的ServerActivity意图的输出。

您的活动名称是ServerActivity但你尝试启动根据这条线命名ServerActivityActivity活动:

11-29 19:33:36.122:E/AndroidRuntime(571):由: 的java .lang.ClassNotFoundException: server.activity.ServerActivityActivity装载机 [email protected]

所以最有可能只是一个 “错字” 如果你愿意。

+0

感谢alextsc @Last战士。你的答案帮我修复错误,虽然这是一个愚蠢的错误:) – aysh1000

2

错误表示无法找到server.activity.ServerActivityActivity的班级,而您的活动实际上是server.activity.ServerActivity。这很可能是你的android-manifest.xml中的一个错误。检查该文件并确保您没有意外提供错误的活动名称。

+0

你说的对,我把你的代码,正如你所说... –

+0

谢谢,它帮助 – aysh1000

0

代码就是这样

<activity android:name=".ServerActivity" 
       android:label="@string/app_name" 
       > 

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

上面还检查此行是目前

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="server.activity" 
相关问题