2016-12-22 5 views
0

Ich versuche eine App zu machen, die mit meinem TCP-Server auf meinem PC verbindet, um Text zu senden, aber jedes Mal, wenn ich den Thread starte, stürzt meine App ab. bitte hilfe. Ich habe gerade begonnen, Android Studio zu verwenden, also bin ich nicht so vertraut damit. mein CodeAndroid App stürzt beim Client Start

hier:

package com.example.alex.hahanice; 

import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Button; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.net.UnknownHostException; 

public class MainActivity extends AppCompatActivity { 

    Handler UIHandler; 

    Thread Thread1 = null; 

    public static final int SERVERPORT = 6000; 
    public static final String SERVERIP = "192.168.1.76"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     this.Thread1 = new Thread(new Thread1()); 
     this.Thread1.start(); 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void onClick(View v) { 
     View view; 

     runOnUiThread(new Runnable() { 
      public void run() { 
       Thread1.start(); 
      } 
     }); 
    } 

    class Thread1 implements Runnable 
    { 
     public void run() { 
      Socket socket = null; 

      try 
      { 
       InetAddress serverAddr = InetAddress.getByName(SERVERIP); 
       socket = new Socket(serverAddr, SERVERPORT); 

       Thread2 commThread = new Thread2(socket); 
       new Thread(commThread).start(); 
      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 

    class Thread2 implements Runnable 
    { 
     private Socket clientSocket; 

     private BufferedReader input; 

     public Thread2(Socket clientSocket) 
     { 
      this.clientSocket = clientSocket; 

      try 
      { 
       this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream())); 
      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 

     public void run() 
     { 
      while(!Thread.currentThread().isInterrupted()) 
      { 
       try 
       { 
        String read = input.readLine(); 
        if(read != null) 
        { 
         //UIHandler.post(new updateUIThread(read)); 
        } 
        else 
        { 
         Thread1 = new Thread(new Thread1()); 
         Thread1.start(); 
         return; 
        } 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

Hier ist, was der Debugger sagt, wenn ich auf die Schaltfläche klicken Sie den Thread zu starten, um meinen PC

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.alex.hahanice, PID: 3772 
        java.lang.IllegalStateException: Could not execute method for android:onClick 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
         at android.view.View.performClick(View.java:4659) 
         at android.view.View$PerformClick.run(View.java:19462) 
         at android.os.Handler.handleCallback(Handler.java:733) 
         at android.os.Handler.dispatchMessage(Handler.java:95) 
         at android.os.Looper.loop(Looper.java:146) 
         at android.app.ActivityThread.main(ActivityThread.java:5692) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:515) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
         at dalvik.system.NativeStart.main(Native Method) 
        Caused by: java.lang.reflect.InvocationTargetException 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:515) 
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
         at android.view.View.performClick(View.java:4659)  
         at android.view.View$PerformClick.run(View.java:19462)  
         at android.os.Handler.handleCallback(Handler.java:733)  
         at android.os.Handler.dispatchMessage(Handler.java:95)  
         at android.os.Looper.loop(Looper.java:146)  
         at android.app.ActivityThread.main(ActivityThread.java:5692)  
         at java.lang.reflect.Method.invokeNative(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:515)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)  
         at dalvik.system.NativeStart.main(Native Method)  
        Caused by: java.lang.IllegalThreadStateException: Thread already started 
         at java.lang.Thread.checkNotStarted(Thread.java:871) 
         at java.lang.Thread.start(Thread.java:1025) 
         at com.example.alex.hahanice.MainActivity$1.run(MainActivity.java:50) 
         at android.app.Activity.runOnUiThread(Activity.java:5001) 
         at com.example.alex.hahanice.MainActivity.onClick(MainActivity.java:48) 
         at java.lang.reflect.Method.invokeNative(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:515)  
         at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
         at android.view.View.performClick(View.java:4659)  
         at android.view.View$PerformClick.run(View.java:19462)  
         at android.os.Handler.handleCallback(Handler.java:733)  
         at android.os.Handler.dispatchMessage(Handler.java:95)  
         at android.os.Looper.loop(Looper.java:146)  
         at android.app.ActivityThread.main(ActivityThread.java:5692)  
         at java.lang.reflect.Method.invokeNative(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:515)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)  
         at dalvik.system.NativeStart.main(Native Method)  
Disconnected from the target VM, address: 'localhost:8600', transport: 'socket' 
+2

Ihre Log sagen, Sie haben den Faden bereits begonnen. dann versuchen Sie es erneut zu starten. Entferne diese Zeile .. this.Thread1.start(); von onCreate Methode. – Noorul

+0

deklarieren Sie auch niemals Klick-Layout-XML. Vertrau mir einfach, tu das nie. Es ist böse. –

Antwort

0

Ihr Problem ist, auf dieser Linie zu verbinden:

Thread Thread1 = null; 

Sie setzen den Thread auf einen Nullwert und das ist, wo es heißt, der Fehler kommt von. Versuchen Sie es einen anderen Wert zuweisen und sehen, ob das etwas ändert.

+0

was kann ich sonst noch ändern? Ich bin neu in diesem Bereich. – Alex

+0

versuchen, es auf Thread t = new Thread(); – Aaron

+0

@Aaron Ich habe versucht, es zu "Thread Thread1 = new Thread();" und ich bekomme weniger Fehler: – Alex

0

Sie starten Thema bei onCreate()

this.Thread1 = new Thread (neue Thread1());

this.Thread1.start();

beginnend Dann wieder den gleichen Thread bei onClick()

Verwandte Themen