将proc.HasExited从C#.Net转换为Java

时间:2012-05-13 09:28:42

标签: c# java

我有一个C#.Net控制台应用程序代码,可以在linux和windows ftp服务器之间传输文件。

代码的行为是我自动打开一个控制台来显示文件传输的状态。在向Windows服务器传输文件和从Windows服务器传输文件时,我需要显示文件传输正在进行的指示符(使用看起来像是在移动或转动的符号)。这些符号如下:“|” - > “/” - > “ - ” - > “\” - > “|”

使用以下代码在C#.Net中显示所述“指标/符号”没有问题:

ProcessStartInfo PSI = new ProcessStartInfo("CMD.exe", "/C [here is the call to psftp / ftp scripts]"); 

String SymbolChar = "|";
Process proc = Process.Start(PSI); 

        while (true)
        {
            Thread.sleep(20);


            if (proc.HasExited)
            {
                Console.WriteLine("\b-> Done\n");
                break;
            }
            else
            {
                SymbolChar = NextChar(SymbolChar);
                Console.Write("\b{0}", SymbolChar);
            }
        }
        StreamReader srError = proc.StandardError;
        StreamReader srOutput = proc.StandardOutput;

//method used to animate status during process
    private static String NextChar(String sCurrentChar)
    {
        String sTempChar = "";

        if (sCurrentChar.equals("|")) {
            sTempChar = "/";
        }
        else if (sCurrentChar.equals("/")) {
            sTempChar = "-";
        }
        else if (sCurrentChar.equals("-")) {
            sTempChar = "\\";
        }
        else if (sCurrentChar.equals("-")) {
            sTempChar = "\\";
        }
        else if (sCurrentChar.equals("\\")) {
            sTempChar = "|";
        }

        return sTempChar;
    }

当我使用以下内容将所述代码转换为java时,我的问题就出现了:

String sParam = "bash " + [here is the call to psftp / ftp scripts];
String cmd[] = {"/bin/bash","-c",sParam};
Process proc = Runtime.getRuntime().exec(cmd);

以上代码完美无缺。 问题是我不知道如何再显示“动画”字符。 我突然不知道(我非常需要帮助)如何转换这个:

Process proc = Process.Start(PSI); 

        while (true)
        {
            Thread.sleep(20);


            if (proc.HasExited)
            {
                Console.WriteLine("\b-> Done\n");
                break;
            }
            else
            {
                SymbolChar = NextChar(SymbolChar);
                Console.Write("\b{0}", SymbolChar);
            }
        }

你是否知道我可以在java中使用“if(proc.HasExited)”这一行,以便我可以继续前进?

很抱歉很长的解释。 我真的非常需要帮助。

非常感谢你!

1 个答案:

答案 0 :(得分:0)

您可以使用'Process.exitValue()'并捕获异常(如果进程尚未完成,它将抛出异常)。如果值为0,则进程正常退出。然而,这是相当丑陋的恕我直言。

我在Java中知道等待进程完成的唯一'正确'方法是使用当前的Thread块,直到Process完成'Process.waitFor()'。

但是,由于当前线程被阻止并等待进程完成,因此需要一个不同的线程来显示进度动画。