2016-12-22 7 views
0

私のパソコンのTCPサーバに接続してテキストを送信するアプリを作ろうとしていますが、スレッドを起動するたびにアプリがクラッシュします。助けてください。私はちょうどそれに精通していないので、アンドロイドスタジオを使用し始めた。ここでクライアントの起動時にアンドロイドアプリがクラッシュする

は私のコードです:

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(); 
       } 
      } 
     } 
    } 
} 

ここでは、デバッガは、私が

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

あなたのログは、あなたがスレッドをすでに開始している、と言います。あなたはそれをもう一度開始しようとしています。この行を削除します.. this.Thread1.start(); fromCreateメソッドから。 – Noorul

+0

は、レイアウト・スルー・XMLを決して宣言しません。私を信じて、決してそれをしないでください。それは悪です。 –

答えて

0

私のPCに接続するために、スレッドを開始する]ボタンをクリックすると、あなたの問題は、このライン上にあると言うものです。

Thread Thread1 = null; 

スレッドをnull値に設定していますが、エラーの原因となっています。別の値を割り当てて、それが何か変わるかどうか確認してください。

+0

他に何を変更できますか?私はこれに新しいです。 – Alex

+0

スレッドt = new Thread()に設定してみてください。 – Aaron

+0

@Aaron私はそれを 'Thread Thread1 = new Thread();'に変更しようとしました。私はエラーが少なくなっています: – Alex

0

あなたはのonCreate()

this.Thread1でスレッドを開始している=新しいスレッド(新しいスレッド1());

this.Thread1.start();再び

のonClickで同じスレッドを開始する()

関連する問題