2015-05-10 1 views
0

У меня есть основной класс, который управляет моим приложением и другими вещами.Выполнение внешнего класса из моего основного файла класса

Существует еще один класс с именем BluetoothConnection, который управляет соединением bt.

Я новичок в java, мне нужно понять, как использовать этот внешний класс! Я знаю, что это очень простой вопрос :)

Я парафирования второго класса в основном один с

private BluetoothConnection btConnection; 

Тогда в onCreat метода главного класса я делаю:

btConnection.run(); 

Правильно ли это? Мое приложение падает, но, вероятно, по другим причинам.

Вот код второго класса

public class BluetoothConnection extends Thread{ 

    public BluetoothSocket mmSocket = null; 
    public BluetoothAdapter mAdapter; 
    private InputStream mmInStream = null; 
    private OutputStream mmOutStream = null; 
    byte[] buffer; 

    private static final UUID MY_UUID = UUID 
      .fromString("00001101-0000-1000-8000-00805F9B34FB"); 

    public BluetoothConnection(BluetoothDevice device) { 

     BluetoothSocket tmp = null; 

     // Get a BluetoothSocket for a connection with the given BluetoothDevice 
     try { 
      tmp = device.createRfcommSocketToServiceRecord(MY_UUID); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     mmSocket = tmp; 

     //now make the socket connection in separate thread to avoid FC 
     Thread connectionThread = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       // Always cancel discovery because it will slow down a connection 
       mAdapter.cancelDiscovery(); 

       // Make a connection to the BluetoothSocket 
       try { 
        // This is a blocking call and will only return on a 
        // successful connection or an exception 
        mmSocket.connect(); 
       } catch (IOException e) { 
        //connection to device failed so close the socket 
        try { 
         mmSocket.close(); 
        } catch (IOException e2) { 
         e2.printStackTrace(); 
        } 
       } 
      } 
     }); 

     connectionThread.start(); 

     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 

     // Get the BluetoothSocket input and output streams 
     try { 
      tmpIn = mmSocket.getInputStream(); 
      tmpOut = mmSocket.getOutputStream(); 
      buffer = new byte[1024]; 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     mmInStream = tmpIn; 
     mmOutStream = tmpOut; 
    } 

    public void run() { 

     // Keep listening to the InputStream while connected 
     while (true) { 
      try { 
       //read the data from socket stream 
       mmInStream.read(buffer); 
       // Send the obtained bytes to the UI Activity 
      } catch (IOException e) { 
       //an exception here marks connection loss 
       //send message to UI Activity 
       break; 
      } 
     } 
    } 

    public void write(byte[] buffer) { 
     try { 
      //write the data to socket stream 
      mmOutStream.write(buffer); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void cancel() { 
     try { 
      mmSocket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

ответ

1

В строке:

private BluetoothConnection btConnection; 

Вы не инициализировать класс, вы просто объявить о его входом в инстанс. , вы должны добавить, прежде чем звонить в бег:

btConnection = new BluetoothConnection(); 
btConnection.run(); 
+1

Спасибо, сэр! Это облегчит мою жизнь :) – Benz

+0

Буду признателен, если вы также примете правильный ответ за вас. – yshahak

1

run() является метод крючка нити, вы не должны вызывать запуск(), если вы не хотите, чтобы этот код будет выполнен в том же потоке вас» называя это. Чтобы начать поток, вызовите start().

Также рассмотрите обсуждение this для реализации Runnable вместо продолжения Thread.

О вашей аварии, как говорит @yshahak в своем ответе, проверьте инициализацию вашей нити.

+0

Спасибо, это интересно, я новичок в обсуждениях! Почему лучше реализовать Runnable вместо продолжения Thread? – Benz

+1

Взгляните на этот https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html –

 Смежные вопросы

  • Нет связанных вопросов^_^