0 Replies - 392 Views - Last Post: 17 August 2010 - 04:14 PM

#1 mahdi68  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 19
  • Joined: 23-May 09

J2ME:BluetoothExeption: unable to swithc master

Posted 17 August 2010 - 04:14 PM

Hi
i want to write bluetooth base app for send and recive string between two device . i have problem . i send string from device A and device B recive it but when i try to send answer from device B to A i get this notifier :

Quote

javax.bluetooth.BluetoothExeption: unable to swithc master

it is becouse this part of code :
StreamConnection conn =(StreamConnection) Connector.open(connString);

this is my code
Client Class :
import java.io.*;
import javax.bluetooth.*;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.*;

/**
 *
 * @author mahdi
 */
class Client implements CommandListener, Runnable {

    Display display;
    String msg;
    Midlet midlet;
    Form frm;
    Command cmdBack = new Command("Back", Command.BACK, 1);
    LocalDevice local = null;
    DiscoveryAgent agent = null;
    Thread thread;
    StreamConnection conn = null;
    OutputStream out = null;

    public Client(String string, Midlet midlet, Display display) {

        this.display = display;
        this.midlet = midlet;
        this.msg = string;
        frm = new Form("Send Form");
        frm.addCommand(cmdBack);
        frm.setCommandListener(this);
        thread = new Thread(this);
        thread.start();

        display.setCurrent(frm);
    }

    private void doDiscovery() {
        try {
            local = LocalDevice.getLocalDevice();
            agent = local.getDiscoveryAgent();

            String connString = agent.selectService(new UUID("86b4d249fb8844d6a756ec265dd1f6a3", false), ServiceRecord.NOAUTHENTICATE_NOENCRYPT, true);
            if (connString != null) {


                try {
                    conn = (StreamConnection) Connector.open(connString);
                } catch (IOException ex) {
                    frm.append(ex.toString() + "1");
                }

                try {
                    out = conn.openOutputStream();
                } catch (IOException ex) {
                    frm.append(ex.toString() + "2");
                }
                try {
                    out.write(msg.getBytes());
                } catch (IOException ex) {
                    frm.append(ex.toString() + "3");
                }
                try {
                    out.close();
                } catch (IOException ex) {
                    frm.append(ex.toString() + "4");
                }
                try {
                    conn.close();
                } catch (IOException ex) {
                    frm.append(ex.toString() + "5");
                }
                System.out.println("Message sent currectly");

            } else {
                frm.append("connString == null");
            }
        } catch (BluetoothStateException ex) {
            frm.append(ex.toString() + "6");
        }
    }

    public void commandAction(Command c, Displayable d) {
        if (c == cmdBack) {
            display.setCurrent(midlet.tb);
        }
    }

    public void run() {
        doDiscovery();
    }
}

Server Class :
import java.io.*;
import javax.bluetooth.*;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;
import javax.microedition.lcdui.*;

/**
 *
 * @author mahdi
 */
class Server implements  Runnable {

    Display display;
    String msg;
    Midlet midlet;
    Thread thread;
    private boolean endRecive = false;

    public Server(Midlet midlet, Display display) {
        this.display = display;
        this.midlet = midlet;
        thread = new Thread(this);
        thread.start();
    }



    private void recive() {
        try {
            LocalDevice local = LocalDevice.getLocalDevice();
            if (!local.setDiscoverable(DiscoveryAgent.GIAC)) {
                midlet.tb.setString("Failed to change to the discoverable mode");
                return;
            }
            StreamConnectionNotifier notifier = (StreamConnectionNotifier) Connector.open("btspp://localhost:" + "86b4d249fb8844d6a756ec265dd1f6a3");
            StreamConnection conn = notifier.acceptAndOpen();
            InputStream in = conn.openInputStream();
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            int data;
            while ((data = in.read()) != -1) {
                out.write(data);
            }
            midlet.tb.delete(0, midlet.tb.size());
            midlet.tb.setString(out.toString());
            in.close();
            conn.close();
            notifier.close();
            endRecive = true;
            thread.interrupt();
            

        } catch (Exception ex) {
            System.out.println(ex.toString());
        }
    }

    public void run() {
        while (endRecive != true) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            recive();
        }
    }
}

and midlet :
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.*;

/**
 * @author mahdi
 */
public class Midlet extends MIDlet implements CommandListener {

    Display display = Display.getDisplay(this);
    TextBox tb = new TextBox("Chat", null, 100, TextField.ANY);
    Command cmdSend = new Command("Send", Command.OK, 1);
    Command cmdRecive = new Command("Recive", Command.OK, 2);
    Command cmdClear = new Command("Clear...", Command.OK, 3);
    Command cmdExit = new Command("Exit", Command.EXIT, 4);

    public void startApp() {
        tb.addCommand(cmdSend);
        tb.addCommand(cmdRecive);
        tb.addCommand(cmdClear);
        tb.addCommand(cmdExit);
        tb.setCommandListener(this);
        display.setCurrent(tb);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    public void commandAction(Command c, Displayable d) {
        if (c == cmdExit) {
            destroyApp(true);
        } else if (c == cmdClear) {
            tb.delete(0, tb.size());
        } else if (c == cmdSend && tb.getString().length() > 0) {
            new Client(tb.getString(), this, display);

        } else if (c == cmdRecive) {
            tb.setString("Wait ...");
            new Server(this, display);

        }
    }
}

what should i do for slove this probleam ?
please help me
thanks

Is This A Good Question/Topic? 0
  • +

Page 1 of 1