-1

runnable を実装したクラスがあり、このクラスの関数の 1 つでスレッドを開始し、メイン アクティビティからこの関数を呼び出し、このクラスのオブジェクトを作成し、スレッド クラスのメソッドを呼び出します。このクラス メソッドを呼び出すアクティビティ コードは次のとおりです。

  broadcast broadcastobject.threadfunc(messages);

スレッドを作成するクラスは次のとおりです。

  public class broadcast  {

private DatagramSocket socket;
String str;
private static final int TIMEOUT_MS = 10;
WifiManager mWifi;
EditText et;
DatagramPacket packet;
Button bt;
private static final int SERVERPORT = 11111;
private static final String SERVER_IP = "192.168.1.255";


public void threadfunc(String message){
    str=message;
                new Thread(new ClientThread()).start();
}

/*
 private InetAddress getBroadcastAddress() throws IOException {
        DhcpInfo dhcp = mWifi.getDhcpInfo();
        if (dhcp == null) {
          //Log.d(TAG, "Could not get dhcp info");
          return null;
        }

        int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
        byte[] quads = new byte[4];
        for (int k = 0; k < 4; k++)
          quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
        return InetAddress.getByAddress(quads);
      }

      */

class ClientThread implements Runnable {

    @Override
    public void run() {


        try {
            socket = new DatagramSocket(SERVERPORT);

            socket.setBroadcast(true);
    //              socket.setSoTimeout(TIMEOUT_MS);
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

            InetAddress serverAddr = null;
            try {


                serverAddr = InetAddress.getByName(SERVER_IP);


            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

           packet = new DatagramPacket(str.getBytes(), str.length(),serverAddr,SERVERPORT);

            try {

                    socket.send(packet);

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    } 

    }

}

私の丸太猫は:

   08-31 21:55:56.277: D/gralloc_goldfish(1669): Emulator without GPU emulation detected.
   08-31 21:56:02.467: D/AndroidRuntime(1669): Shutting down VM
   08-31 21:56:02.467: W/dalvikvm(1669): threadid=1: thread exiting with uncaught  exception (group=0x409961f8)
   08-31 21:56:02.517: E/AndroidRuntime(1669): FATAL EXCEPTION: main
   08-31 21:56:02.517: E/AndroidRuntime(1669): java.lang.NullPointerException
   08-31 21:56:02.517: E/AndroidRuntime(1669):  at soft.b.peopleassist.Send$1.onClick(Send.java:113)
    08-31 21:56:02.517: E/AndroidRuntime(1669):     at android.view.View.performClick(View.java:3480)
   08-31 21:56:02.517: E/AndroidRuntime(1669):  at android.view.View$PerformClick.run(View.java:13983)
    08-31 21:56:02.517: E/AndroidRuntime(1669):     at android.os.Handler.handleCallback(Handler.java:605)
    08-31 21:56:02.517: E/AndroidRuntime(1669):     at android.os.Handler.dispatchMessage(Handler.java:92)
     08-31 21:56:02.517: E/AndroidRuntime(1669):    at android.os.Looper.loop(Looper.java:137)
       08-31 21:56:02.517: E/AndroidRuntime(1669):  at android.app.ActivityThread.main(ActivityThread.java:4340)
      08-31 21:56:02.517: E/AndroidRuntime(1669):   at java.lang.reflect.Method.invokeNative(Native Method)
      08-31 21:56:02.517: E/AndroidRuntime(1669):   at java.lang.reflect.Method.invoke(Method.java:511)
     08-31 21:56:02.517: E/AndroidRuntime(1669):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
     08-31 21:56:02.517: E/AndroidRuntime(1669):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
   08-31 21:56:02.517: E/AndroidRuntime(1669):  at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

1

これは単に、使用しているエミュレーターで GPU エミュレーションが有効になっていないことを意味します。Android SDK Tools R15 では、GPU エミュレーションを有効にできます。新しいエミュレータ仮想デバイスを作成し、ハードウェア プロパティで GPU エミュレーションを true に設定する必要があります。

ここに画像の説明を入力

于 2013-08-31T22:01:54.397 に答える