You may want to do these things asynchronously on different threads, and you will definitely not want to ignore exceptions or the error stream.
But most important, you're not calling cmd correctly since by doing "cmd /c start cmd.exe" you're creating a process within a process.
For e.g.,
import java.io.*;
public class OpenCmd {
public static void main(String[] args) {
try {
// Process p = Runtime.getRuntime().exec("cmd /c start cmd.exe");
Process p = Runtime.getRuntime().exec("cmd.exe");
final BufferedReader inp = new BufferedReader(new InputStreamReader(
p.getInputStream()));
final BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
p.getOutputStream()));
final BufferedReader err = new BufferedReader(new InputStreamReader(
p.getErrorStream()));
new Thread(new Runnable() {
public void run() {
try {
out.append("sometext");
out.write("Some Text!\n\n");
out.flush();
out.write("Second Line...\n");
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
String line = "";
while ((line = inp.readLine()) != null) {
System.out.println("response1: " + line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inp.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
String line = "";
while ((line = err.readLine()) != null) {
System.err.println("err: " + line);
}
inp.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
int exitVal = p.waitFor();
System.out.println("exitVal := " + exitVal);
} catch (IOException io) {
io.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}