현재 연결되어있는 각각의 컴퓨터들에게 ping을 보내어 보내어지면 화면에 on 이라는 아이콘을 실패가 나오면 false 라는 아이콘이 나오도록 하려고합니다.
멀티핑으로 범위를 줘서 그범위 안에 있는 ip를 가져와서 날리는 거구요..
문제는 처음 한번은 잘됩니다. 하지만 한번 더 눌럿을때 어플이 중지되면서 밖으로 나오는 현상이 발생합니다.
isAlive 함수를 이용하여 쓰레드가 살아있어서 그런지 확인해 보았지만 죽어있는 상태인데도 쓰레드가 돌지 않는 것 같습니다.
아시는분은 조언부탁 드리겟습니다.ㅠ
매인소스
package com.example.ping;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStream;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import com.example.ping.CopyOfMainActivity.PingTask;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
PingTask mTask;
TextView result;
TextView text_result;
Handler handler = new Handler();
EditText source_ip_1;
EditText source_ip_2;
EditText source_ip_3;
EditText source_ip_4;
EditText dest_ip_1;
EditText dest_ip_2;
EditText dest_ip_3;
EditText dest_ip_4;
ImageView check_on_off1;
ImageView check_on_off2;
ImageView check_on_off3;
ImageView check_on_off4;
ImageView check_on_off5;
ArrayList<Integer> arrayitem = new ArrayList<Integer>();
public int j=0;
Make_IP ip_machine;
ArrayList<String> result_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
source_ip_1 = (EditText) findViewById(R.id.source_ip_1);
source_ip_2 = (EditText) findViewById(R.id.source_ip_2);
source_ip_3 = (EditText) findViewById(R.id.source_ip_3);
source_ip_4 = (EditText) findViewById(R.id.source_ip_4);
dest_ip_1 = (EditText) findViewById(R.id.dest_ip_1);
dest_ip_2 = (EditText) findViewById(R.id.dest_ip_2);
dest_ip_3 = (EditText) findViewById(R.id.dest_ip_3);
dest_ip_4 = (EditText) findViewById(R.id.dest_ip_4);
check_on_off1 = (ImageView)findViewById(R.id.check01);
check_on_off2 = (ImageView)findViewById(R.id.check02);
check_on_off3 = (ImageView)findViewById(R.id.check03);
check_on_off4 = (ImageView)findViewById(R.id.check04);
check_on_off5 = (ImageView)findViewById(R.id.check05);
arrayitem.add(R.id.check00);
arrayitem.add(R.id.check01);
arrayitem.add(R.id.check02);
arrayitem.add(R.id.check03);
arrayitem.add(R.id.check04);
arrayitem.add(R.id.check05);
result = (TextView)findViewById(R.id.textView3);
Button ok_button = (Button) findViewById(R.id.okbutton);
Button clear_button =(Button) findViewById(R.id.cancelbutton);
text_result = (TextView) findViewById(R.id.text_result);
clear_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
result.setText(" ");
text_result.setText(" ");
}
});
ok_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
ip_machine = new Make_IP(source_ip_4, dest_ip_4);
result_list = ip_machine.get_ip(
source_ip_1, source_ip_2, source_ip_3);
if(ping.isAlive())Log.i("ping","thread run1.");
else Log.i("ping","thread die1");
ping.start();
if(ping.isAlive())Log.i("ping","thread run2.");
else Log.i("ping","thread die2");
}
});
}
Thread ping = new Thread(new Runnable() {
String re="";
@Override
public void run() {
for (int i = 0; i < result_list.size(); i++) {
Log.i("ping","resultlist="+result_list.size());
j=i;
try {
if (InetAddress.getByName(result_list.get(i)).isReachable(3000) == true) {
handler.post(new Runnable() {
@Override
public void run() {
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_check_ok);
ImageView ch = (ImageView)findViewById(arrayitem.get(j));
ch.setImageBitmap(bm);
}
});
} else {
handler.post(new Runnable() {
@Override
public void run() {
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_check_fail);
ImageView ch = (ImageView)findViewById(arrayitem.get(j));
ch.setImageBitmap(bm);
}
});
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
handler.post(new Runnable() {
@Override
public void run() {
Log.i("ping",re);
}
});
}
});
}
에러메시지
07-28 20:57:01.008: D/AndroidRuntime(1351): Shutting down VM
07-28 20:57:01.008: W/dalvikvm(1351): threadid=1: thread exiting with uncaught exception (group=0x40c271f8)
07-28 20:57:01.013: E/AndroidRuntime(1351): FATAL EXCEPTION: main
07-28 20:57:01.013: E/AndroidRuntime(1351): java.lang.IllegalThreadStateException: Thread already started.
07-28 20:57:01.013: E/AndroidRuntime(1351): at java.lang.Thread.start(Thread.java:1045)
07-28 20:57:01.013: E/AndroidRuntime(1351): at com.example.ping.MainActivity$3.onClick(MainActivity.java:105)
07-28 20:57:01.013: E/AndroidRuntime(1351): at android.view.View.performClick(View.java:3620)
07-28 20:57:01.013: E/AndroidRuntime(1351): at android.view.View$PerformClick.run(View.java:14292)
07-28 20:57:01.013: E/AndroidRuntime(1351): at android.os.Handler.handleCallback(Handler.java:605)
07-28 20:57:01.013: E/AndroidRuntime(1351): at android.os.Handler.dispatchMessage(Handler.java:92)
07-28 20:57:01.013: E/AndroidRuntime(1351): at android.os.Looper.loop(Looper.java:137)
07-28 20:57:01.013: E/AndroidRuntime(1351): at android.app.ActivityThread.main(ActivityThread.java:4507)
07-28 20:57:01.013: E/AndroidRuntime(1351): at java.lang.reflect.Method.invokeNative(Native Method)
07-28 20:57:01.013: E/AndroidRuntime(1351): at java.lang.reflect.Method.invoke(Method.java:511)
07-28 20:57:01.013: E/AndroidRuntime(1351): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-28 20:57:01.013: E/AndroidRuntime(1351): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-28 20:57:01.013: E/AndroidRuntime(1351): at dalvik.system.NativeStart.main(Native Method)