hej.
mam pytanie , mozna w jakis sposob uruchamiac komendy systemowe poprzez program w javie ? chocby proste uname -a ? czy do tego potrzebna jest jakas biblioteka dodatkowa ?
z gory dzieki za poswiecony czas
sheezol
hej.
mam pytanie , mozna w jakis sposob uruchamiac komendy systemowe poprzez program w javie ? chocby proste uname -a ? czy do tego potrzebna jest jakas biblioteka dodatkowa ?
z gory dzieki za poswiecony czas
sheezol
Tworzysz po prostu proces programu. Tu masz przykład: http://forum.ubuntu.pl/showthread.php?p=667586
powołując się na ten właśnie przykład , da radę jakoś wynik tej komendy przesłać do jakiegoś Stringa ?
Runtime rt = Runtime.getRuntime();
args[0] = "uname";
Process proc = rt.exec(args[0]);
chcialbym zeby jakas tam zmienna przechowywala wynik po wykonaniu tej komendy systemowej , a mam blad ze incompatible types itd.
a po uruchomieniu mam blad
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at modul_5.Serwer_1.main(Serwer_1.java:37)
Java Result: 1
linia 37 to ten args[0] = "uname";
moze jakas mala podpowiedz prosze ?
sheezol
package pl.koziolekweb.programmers.t155048;
import java.io.IOException;
import java.io.InputStream;
public class CmdRunner {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("uname", new String[]{"-a"});
InputStream inputStream = process.getInputStream();
int i = 0;
while((i = inputStream.read())>0){
System.out.print(""+(char)i);
}
}
}
To powinno zadziałać ;)
tak w ogole to jest aplikacja serwer.java ktora tworzy gniazdko na porcie 5555 i przez PrintWriter "wstrzykuje" kod html dla przegladarki.
powyzsza wskazowka kompiluje się świetnie , ale wywala mi cos takiego podczas polaczenia przez przegladarke.
Exception in thread "main" java.io.IOException: Cannot run program "ver.": CreateProcess error=2, Nie mo¿na odnaleæ okrelonego pl
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at modul_5.Serwer_cw1.main(Serwer_cw1.java:36)
Caused by: java.io.IOException: CreateProcess error=2, Nie mo¿na odnaleæ okrelonego pl
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 4 more
Java Result: 1
a tutaj przykladowy kod "serwera"
package serwertest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Serwer_test {
private static ServerSocket sock;
private static Socket commSock;
public static void main(String[] args) throws IOException
{
sock = new ServerSocket(5555);
System.out.println("serwer gotowy do pracy");
commSock = sock.accept();
PrintWriter out = new PrintWriter(commSock.getOutputStream(), true);
BufferedReader in = new BufferedReader( new InputStreamReader(commSock.getInputStream()));
String inputLine, outputLine;
inputLine = in.readLine();
out.println("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"pl\" lang=\"pl\">");
out.println("<head>");
out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
out.println("</head>");
out.println("<body>");
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("ver.");
InputStream inputStream = process.getInputStream();
int i = 0;
while((i = inputStream.read())>0)
{
out.println("<h1>" + ""+(char)i + "</h1>");
}
out.println("<br>");
out.println("<h1>UWAGA!</h1> można używać <b>wszelkich</b> tagów HTML");
out.println("</body>");
out.println("</html>");
in.close();
out.close();
commSock.close();
sock.close();
}
}
akurat ten przyklad jest na windowsie stad tez komenda "ver." , chodzi mi o to aby ten "serwer" podawal do przegladarki wersje systemu na ktorym jest uruchomiony wlasnie poprzez komende systemowa ver.
prosze o pomoc w rozwiazaniu problemu.
sheezol
Może
System.getProperty("os.name");
//i
System.getProperty("os.version");
no i wszystko jasne ;) dzieki serdeczne
temat zamkniety
pozdrawiam
sheezol
Cannot run program "ver.": CreateProcess error=2, The system cannot find the file specified
Nie umiem się pozbyć tego błędu z podanego tutaj programu. Po połączeniu z przeglądarką wywala program, może jakieś małe wskazówki. Będę wdzięczny.
Co to za kropka po 'ver', hm?
Dwie wskazówki:
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("ver.");
InputStream inputStream = process.getInputStream();
int i = 0;
while((i = inputStream.read())>0)
{
out.println("<h1>" + ""+(char)i + "</h1>");
}
daj
out.println("<h1>"+System.getProperty("os.name")+" "+System.getProperty("os.wersion")+"</h1>")+;
@deus., w Windows działa i ver, i ver., w Linuksie ani to, ani to.
Ekhm, fakt. Nie działa bo 'ver' nie jest programem a wewnętrznym poleceniem interpretera - "cmd /c ver" powinno zadziałać. Uruchamianie programu to nie to samo co wywołanie polecenia shella.