У меня есть класс CheckPrograminstallation (который является частью плагина eclipse) с проверкой метода, которая проверяет, установлена ли программа. Он возвращает true при установке и false в противном случае.разные результаты для того же метода call
public class CheckPrograminstallation{
public static boolean check(String programname, String OsName)
throws Exception {
// Get installation path of programname
String foundpath = "";
String dirName = "";
String line;
String programpath = null;
Process process = null;
boolean IsInstalled = false;
if (OsName.equals("Windows")) {
try {
// get Windows Directory first
process = Runtime.getRuntime().exec("cmd /c echo %windir%");
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
// read from stream
if ((line = reader.readLine()) != null) {
foundpath = line.toString();
// cut off "\Windows" from the found path
int last = foundpath.lastIndexOf("\\");
dirName = foundpath.subSequence(0, last).toString();
process = null;
// get program installation path
process = Runtime.getRuntime().exec(
"cmd /c where /R " + dirName + " " + programname);
reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
if ((line = reader.readLine()) != null) {
programpath = line.toString();
System.out.println(programpath);
IsInstalled = true;
}
}
} catch (Exception e) {
DO SOMETHING);
}
}
Когда я вызываю метод из тестового класса, он работает. Но когда я называю тот же метод, при запуске плагина:
...boolean isInstalledPscp;
boolean IsWindows;
...
if (IsWindows == true) {
// for Windows: check if pscp is installed
isInstalledPscp = CheckIfInstalled.check("pscp", "Windows");
if (isInstalledPscp == false) {
do something }
}
... она всегда возвращает ложь. Как это может быть?
Это привело меня в сумасшествие на целый день. Использование .equals для сравнения String и по-прежнему получать false как результат. Итак, это не проблема сравнения строк ИМХО.
исправлено это, все еще возвращает false – Sandra
Тогда может быть несколько проблем. 1. код не входит в 'if (IsWindows == true) {' и, следовательно, вы приземляетесь со значением по умолчанию 2. ваш код не переходит в 'if ((line = reader.readLine())! = Null) {' (обратите внимание на его дважды) и чтобы установить переменную в true, она должна вводиться в оба цикла. – SMA