我有一个类CheckPrograminstallation(它是eclipse插件的一部分),带有方法检查,检查程序是否已安装。它在安装时返回true,否则返回false。
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 }
}
...它总是返回false。 怎么会这样?
这让我疯狂了一整天。使用.equals进行字符串比较,结果仍然是false。所以这不是字符串比较问题恕我直言。
答案 0 :(得分:0)
更改字符串比较:
if (OsName == "Windows") {
要:
if (OsName.equals("Windows")) {
由于你的if没有成功,它永远不会进入,因此它会返回你的错误。
答案 1 :(得分:0)
您使用equals()
方法比较字符串,而不是逻辑等于运算符==
我还建议您遵循java命名约定并使用以小写字母开头的变量名称,例如osName
而不是OsName
。
答案 2 :(得分:0)
打印出代码中返回的路径(如果有的话),我怀疑在插件中运行时参数是不同的。
也许System.getEnv System.getProperties是一种更好的方法来查找Windows目录而不是启动新进程。