2012-08-02 100 views
0

我试图使用ModBus协议连接到PLC。我打电话的ModBus从螺纹连接方法和我收到我的主线程上运行的通信异常... 我不知道它逃脱...Modbus协议转义线程(Android,Jamod)

例外:



    08-02 10:48:44.461: W/System.err(4395): android.os.NetworkOnMainThreadException 
    08-02 10:48:44.471: W/System.err(4395):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 
    08-02 10:48:44.471: W/System.err(4395):  at 

代码:




    package com.kikudjiro.android.echo; 

    import net.wimpi.modbus.facade.ModbusTCPMaster; 
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 

    public class settings extends Activity implements Runnable { 

     Button connect_b, disconnect_b; 
     Thread comm = new Thread(this); 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.settings); 
      addListenerOnButton(); 
     } 

     public void addListenerOnButton() { 

      connect_b = (Button) findViewById(R.id.button1); 
      disconnect_b = (Button) findViewById(R.id.button2); 
      connect_b.setOnClickListener(new OnClickListener() { 
       public void onClick(View arg0) { 
        comm.run(); 
       } 

      }); 

      disconnect_b.setOnClickListener(new OnClickListener() { 

       public void onClick(View arg0) { 
        comm.interrupt(); 
       } 

      }); 
     } 

     // @Override 
     public void run() { 

      try { 
       ModbusTCPMaster MB = new ModbusTCPMaster("192.168.107.29", 502); 
       //while (!comm.interrupted()) { 
        Log.i("!!!!!!!", "try!"); 
        MB.connect(); 
        MB.writeCoil(1, 1, true); 
        MB.disconnect(); 
       //} 
      } 

      catch (Exception ex) { 
       ex.printStackTrace(); 
       Log.i("hhh", "exceptionas!!!"); 
      } finally { 
       Log.i("!!!!!!!", "finally!"); 
      } 

     } 

    } 

回答

0

在按一下按钮,你叫comm.run()刚刚直接执行run()方法在UI线程的上下文。这是一个常见错误,您不应该直接在Thread实例上调用run()。使用comm.start()在工作线程的上下文中执行Modbus代码。

Here is the Javadoc