数组索引超出范围异常

时间:2011-09-06 22:51:54

标签: java

我是Java的新手,并获得了这段代码,没有任何解释只是想出来。我得到了基础但我不知道为什么错误到位。我得到了

java.lang.arrayindexoutofboundsexception:2
       at prealert.listener.<init>.(Listener.Java:26)
       at prealert.listener.main(Listener.Java:40)

提前感谢您的帮助。

 package prealert;

    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;

    import jpcap.JpcapCaptor;
    import jpcap.NetworkInterface;

    public class Listener {

        private NetworkInterface[] devices;
        private NetworkInterface deviceName;
        private Reciever reciever;
        private JpcapCaptor jpcap;
        public static Logger log;


        public Listener() {
            PropertyConfigurator.configure("log4j.properties");
            log = Logger.getRootLogger();
            log.debug("Log4j has been initialized");
            devices = JpcapCaptor.getDeviceList();
            for (int i = 0; i < devices.length; i++) {
                log.info(devices[i].description);
            }
            deviceName = devices[2];
            reciever = new Reciever();
            try {
                jpcap = JpcapCaptor.openDevice(deviceName, 2000, true, 100);
            } catch (Exception e) {
                log.error("Error with JPcapCreation", e);
            }
            reciever.jpcap = jpcap;
            reciever.start();
            new SetBoard(SetBoard.DEFAULT).start();
        }

        public static void main(String args[]) {
            try {
                new Listener();
            } catch (Exception e) {
                log.error("ERROR IN THE MAIN METHOD OF LISTENER!", e);
            }
        }
    }

5 个答案:

答案 0 :(得分:3)

看看

deviceName = devices[0];

如果没有设备,则会因您看到的异常而失败。

答案 1 :(得分:0)

我假设错误的行是:deviceName = devices[0];,这会因为devices = JpcapCaptor.getDeviceList();返回没有元素的数组。

假设这是真的,你需要找出数组为空的原因(因为你假设它至少有一个元素)或者应对它没有任何元素并添加if(设备)的事实。长度> 0)使用前。

答案 2 :(得分:0)

我认为问题出在中间的for循环中。虽然代码本身看起来很好,但您可能需要先检查设备中是否包含某些内容

答案 3 :(得分:0)

 deviceName = devices[0];

您需要确保devices[0]是该数组的元素,否则您将获得index out of bound exception。您可以使用devices.length

进行检查

答案 4 :(得分:0)

当你调用设备时,你必须确保你的数组中至少有3个元素[2],也许你的getDeviceList()返回一个大小为0的数组。