简体   繁体   中英

Convert proc.HasExited from C#.Net to Java

I have a C#.Net console app code that transfers files between linux and windows ftp servers.

The code's behavior is that I automatically open a console to display status of the file transfer. While transferring files to and from the windows server, I need to display an indicator that the file transfer is on-going (using symbols that look like they are moving or turning) . These symbols are as follows : "|" --> "/" --> "-" --> "\\" --> "|"

There had been no problem displaying the said "indicator/symbols" in C#.Net using the following codes :

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;
    }

My problem started when I converted the said codes into java using the following :

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

Above code is perfectly working. Problem is I don't know how to display the "animated" characters anymore. I suddenly don't know (and I badly need help on) how to convert this :

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);
            }
        }

Do you have any idea as to what I can use for the line "if (proc.HasExited)" in java so that I could move forward?

Sorry for the long explanation. I really, really need help.

Thank you very much in advance!

You could use 'Process.exitValue()' and catch the Exception (it will throw an Exception if the process is not done yet). If the value is 0 the process exited normally. However this is rather ugly IMHO.

The only 'proper' way I know in Java to wait for a process to finish is to have the current Thread block until the Process is done with 'Process.waitFor()'.

This would however require a different thread to display your progress animation since your current thread is blocked and waiting for the Process to finish.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM