ここにいくつかのコードを与えます
public void doScan() {
Log.i(LOG_TAG, "Start scanning");
ExecutorService executor = Executors.newFixedThreadPool(NB_THREADS);
for(int dest=0; dest<255; dest++) {
String host = "192.168.5." + dest; //add net address instead of hardcoding
executor.execute(pingRunnable(host));
}
Log.i(LOG_TAG, "Waiting for executor to terminate...");
executor.shutdown();
try { executor.awaitTermination(10*1000, TimeUnit.MILLISECONDS); } catch (InterruptedException ignored) { }
Log.i(LOG_TAG, "Scan finished");
}
private Runnable pingRunnable(final String host) {
return new Runnable() {
public void run() {
Log.v(LOG_TAG, "Pinging " + host + "...");
try {
Socket s = null;
s = new Socket(InetAddress.getByName(host), ACES_PORT);
Log.v(LOG_TAG, "conn:"+s.toString());
if(s.isConnected()){
Log.v(LOG_TAG, "connected " + host);
foundDevicesArray.add(host);
}
} catch (UnknownHostException e) {
Log.e(LOG_TAG, "Not found", e);
} catch (IOException e) {
Log.e(LOG_TAG, "IO Error", e);
}
}
};
}
ホストがスレッド内で接続されている場合、ホストを保存しようとしています。
私はグローバルを持っています(私はAndroidを初めて使用するので、それが何と呼ばれるかわかりません)スレッド内でArrayList.add(host)を実行すると、クラッシュします。取得方法がわかりません。クラッシュからの通常のエラーメッセージ。