我有一个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)”这一行,以便我可以继续前进?
很抱歉很长的解释。 我真的非常需要帮助。
非常感谢你!
答案 0 :(得分:0)
您可以使用'Process.exitValue()'并捕获异常(如果进程尚未完成,它将抛出异常)。如果值为0,则进程正常退出。然而,这是相当丑陋的恕我直言。
我在Java中知道等待进程完成的唯一'正确'方法是使用当前的Thread块,直到Process完成'Process.waitFor()'。
但是,由于当前线程被阻止并等待进程完成,因此需要一个不同的线程来显示进度动画。