MahatmaX / YADrone

Yet Another Drone Framework (for the AR.Drone 2)
39 stars 40 forks source link

java.net.BindException: Address already in use: Cannot bind #11

Closed 452 closed 10 years ago

452 commented 10 years ago

os Windows 7 x64 AR.Drone connected to my home router with internet

public class TutorialMain
{
    public static void main(String[] args)
{
    IARDrone drone = null;
    try
    {
        // Tutorial Section 1
        drone = new ARDrone("192.168.1.69");
        drone.start();
        drone.getCommandManager().takeOff();
        System.exit(-1);
    }
    catch (Exception exc)
    {
        exc.printStackTrace();
        if (drone != null)
        drone.stop();
        System.exit(-1);
    }
}
}
java.net.BindException: Address already in use: Cannot bind
    at java.net.DualStackPlainDatagramSocketImpl.socketBind(Native Method)
    at java.net.DualStackPlainDatagramSocketImpl.bind0(DualStackPlainDatagramSocketImpl.java:81)
    at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:95)
    at java.net.DatagramSocket.bind(DatagramSocket.java:376)
    at java.net.DatagramSocket.(DatagramSocket.java:231)
    at java.net.DatagramSocket.(DatagramSocket.java:284)
    at java.net.DatagramSocket.(DatagramSocket.java:256)
    at de.yadrone.base.manager.AbstractManager.connect(AbstractManager.java:41)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:677)
    at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
    at de.yadrone.base.command.CommandManager.sendCommand(CommandManager.java:750)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:719)
    at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
    at de.yadrone.base.command.CommandManager.sendCommand(CommandManager.java:750)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:719)
    at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
    at de.yadrone.base.command.CommandManager.sendCommand(CommandManager.java:750)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:719)
    at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
    at de.yadrone.base.command.CommandManager.sendCommand(CommandManager.java:750)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:719)
    at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
    at de.yadrone.base.command.CommandManager.sendCommand(CommandManager.java:750)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:715)
    at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
    at de.yadrone.base.command.CommandManager.sendCommand(CommandManager.java:750)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:715)
    at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
    at de.yadrone.base.command.CommandManager.sendCommand(CommandManager.java:750)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:715)
    at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
    at de.yadrone.base.command.CommandManager.sendCommand(CommandManager.java:750)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:715)
    at java.lang.Thread.run(Thread.java:744)
java.lang.NullPointerException
    at de.yadrone.base.command.CommandManager.sendCommand(CommandManager.java:750)
    at de.yadrone.base.command.CommandManager.run(CommandManager.java:715)
    at java.lang.Thread.run(Thread.java:744)
452 commented 10 years ago
public static void main(String[] args) {
    IARDrone drone = null;
    try
    {
        drone = new ARDrone("192.168.1.69");
        drone.start();
        drone.getNavDataManager().addBatteryListener(new BatteryListener() {
            public void batteryLevelChanged(int percentage)
            {
                System.out.println("Battery: " + percentage + " %");
            }
            public void voltageChanged(int vbat_raw) { }
        });
    } catch(Exception e){
        e.printStackTrace();
        drone.stop();
    }
}
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
Battery: 50 %
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
Battery: 50 %
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
Battery: 50 %
Control ack timeout true
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
Battery: 50 %
Battery: 50 %
Battery: 50 %
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
java.lang.IllegalArgumentException
    at java.nio.Buffer.limit(Buffer.java:267)
    at de.yadrone.base.navdata.NavDataManager.parse(NavDataManager.java:415)
    at de.yadrone.base.navdata.NavDataManager.run(NavDataManager.java:341)
    at java.lang.Thread.run(Thread.java:744)
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
Battery: 50 %
MahatmaX commented 10 years ago

Concerning the first (original issue). That seems to be no bug, cause you are only allowed to open the same port once. If you start YADrone multiple times this error ("Address already in use") will appear. Make sure to close all running instances. ToDo: better exception management in YADrone (and in the tutorial) in order to shutdown the whole process via System.exit if an exception occurs.

Concerning the second issue: Which firmware version does your drone have ?

452 commented 10 years ago

firmware 2.4.8 AR.Drone 2.0 YADrone sources from Github

MahatmaX commented 10 years ago

Exceptions are now propagated. But does this hold for all important exceptions ? If so, please re-open.