我是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);
}
}
}
答案 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的数组。