0

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

代码的行为是我自动打开一个控制台来显示文件传输的状态。在与 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)”行中使用什么以便继续前进有任何想法吗?

抱歉,解释太长了。我真的,真的需要帮助。

非常感谢您!

4

1 回答 1

0

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

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

然而,这将需要一个不同的线程来显示您的进度动画,因为您当前的线程被阻塞并等待进程完成。

于 2012-05-13T09:38:14.583 回答