簡體   English   中英

數組索引超出范圍異常

[英]Array index out of bounds exception

我是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);
            }
        }
    }

看一眼

deviceName = devices[0];

如果沒有設備,則將失敗,並顯示異常。

我假設錯誤的行是: deviceName = devices[0]; 這將因為devices = JpcapCaptor.getDeviceList(); 返回一個沒有元素的數組。

假設這是真的,您需要弄清楚為什么數組為空(因為您假設它將至少有一個元素),或者應對它不包含任何元素的事實並添加if(devices.length> 0 ),然后再使用它。

我認為問題出在中間的for循環中。 盡管代碼本身看起來不錯,但您可能需要首先檢查設備中是否包含某些內容。

 deviceName = devices[0];

您需要確保devices[0]是該數組的元素,否則您將獲得綁定異常范圍之外索引 您可以使用devices.length檢查

調用devices [2]時,必須確保數組中至少有3個元素,也許getDeviceList()返回的數組大小為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM