相同方法调用的结果不同

时间:2015-02-24 15:51:37

标签: java

我有一个类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。所以这不是字符串比较问题恕我直言。

3 个答案:

答案 0 :(得分:0)

更改字符串比较:

if (OsName == "Windows") {

要:

if (OsName.equals("Windows")) {

由于你的if没有成功,它永远不会进入,因此它会返回你的错误。

答案 1 :(得分:0)

您使用equals()方法比较字符串,而不是逻辑等于运算符==

我还建议您遵循java命名约定并使用以小写字母开头的变量名称,例如osName而不是OsName

答案 2 :(得分:0)

打印出代码中返回的路径(如果有的话),我怀疑在插件中运行时参数是不同的。

也许System.getEnv System.getProperties是一种更好的方法来查找Windows目录而不是启动新进程。