Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:
SqlConnection connection = null;
connection.Open();
Это вызовет ошибку, потому что, пока я объявил переменную «connection
», она не указала ни на что. Когда я пытаюсь вызвать член «Open
», для его устранения нет ссылки, и он будет вызывать ошибку.
Чтобы избежать этой ошибки:
object == null
. Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.
Вы не можете получить доступ к этим низкоуровневым данным о сети в Java. Вы можете получить некоторые сведения о сетевом интерфейсе с классом NetworkInterface
, но если вы видите в предоставленных методах, никто не связан с сетями Wi-Fi, и не будет предоставлен какой-либо способ получить SSID. Как указано ниже, вы должны использовать некоторые собственные функции, вызвав собственную библиотеку с JNI или вызывая инструмент ОС с помощью Runtime
.
Java не предназначен для выполнения подобных действий, трудно реализовать независимым от платформы способом, и любые детали аппаратного уровня не могут управляться в Java по принципу.
То же самое относится к другим сетям, таким как 3G, GPRS ... приложение не должно знать тип подключения ни его детали. Java может управлять вещами только на уровне транспорта (TCP), а не сети (IP), а не Link (3G, Wi-Fi, Ethernet ...), поэтому вы можете управлять только сокетами.
ArrayList<String>ssids=new ArrayList<String>();
ArrayList<String>signals=new ArrayList<String>();
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "netsh wlan show all");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (r.read()!=-1) {
line = r.readLine();
if (line.contains("SSID")||line.contains("Signal")){
if(!line.contains("BSSID"))
if(line.contains("SSID")&&!line.contains("name")&&!line.contains("SSIDs"))
{
line=line.substring(8);
ssids.add(line);
}
if(line.contains("Signal"))
{
line=line.substring(30);
signals.add(line);
}
if(signals.size()==7)
{
break;
}
}
}
for (int i=0;i<ssids.size();i++)
{
System.out.println("SSID name == "+ssids.get(i)+" and its signal == "+signals.get(i) );
}
Вам придётся прибегнуть к решению JNI. В http://sourceforge.net/projects/jwlanscan есть что-то доступное, но это работает только для систем Windows. Или вы можете сделать это уродливым способом и использовать Runtime.getRuntime (). Exec (...) и использовать инструменты командной строки, доступные для вашей ОС (* nix = iwconfig), и прибегать к разбору.