Strona 1 z 1
Java - wykonywanie poleceń terminala
: 14 lis 2009, 09:51
autor: Scofield1
Witam,
Zaczynam się uczyć programowania w javie i ostatnio stworzyłem sobie bardzo prostą aplikacje z gui. Teraz chciałbym aby program javy po przyciśnięciu przycisku wykonywał jakieś polecenie terminala np. apt-get update. Jest to możliwe? Przeszukałem google i nic nie znalazłem co mnie mogło zainteresować.
W C++ służyła do tego funkcja system("") np. system("apt-get update"). Czy istnieje w javie coś podobnego?
Odp: Java - wykonywanie poleceń terminala
: 14 lis 2009, 14:09
autor: Kastagir
Poczytaj o klasach Runtime (metoda exec) i Process.
Przykład
Kod: Zaznacz cały
import java.io.*;
public class ProcTest
{
public static void main(String args[]) throws IOException
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(args);
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while(br.ready())
{
System.out.println(br.readLine());
}
}
}
Odp: Java - wykonywanie poleceń terminala
: 14 lis 2009, 17:56
autor: Scofield1
O dzięki

. A mógłbyś napisać jeszcze taki praktyczny przykład np. na funkcji echo ?? Ja próbuję cały czas ale nie działa, tzn kompilacja przebiega dobrze ale przy uruchomieniu dostaję komunikat:
Kod: Zaznacz cały
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at ProcTest.main(ProcTest.java:16)
Kod: Zaznacz cały
import java.io.*;
public class ProcTest {
public static void main(String args[]) throws IOException
{
Runtime rt = Runtime.getRuntime();
args[0] = "echo \"test\"";
Process proc = rt.exec(args[0]);
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while(br.ready())
{
System.out.println(br.readLine());
}
}
}
Odp: Java - wykonywanie poleceń terminala
: 14 lis 2009, 19:46
autor: Kastagir
Odp: Java - wykonywanie poleceń terminala
: 14 lis 2009, 22:56
autor: Scofield1
Witam ponownie
pozmieniałem sobie program i wyszło takie coś:
Kod: Zaznacz cały
import java.io.*;
public class ProcTest {
public static void main(String [] agrs) throws IOException
{
String[] A = new String[10];
A[0] = "kadu";
A[1] = "firefox http://www.ubuntu.pl";
A[2] = "gedit";
A[3] = "nautilus /etc/";
int a = 0;
while(a <= 3){
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(A[a]);
a++;
}
}
}
Czyli uruchamia kolejno programy: kadu, firefox, gedit, oraz nautilus. I teraz mam pytanie, czy da się wykonać jakąś komendę, którą się używa normalnie w terminalu? Myślałem zrobić tak, że otwieramy przez program javy tak jak wyżej, terminal czyli
gnome-terminal i wkleić do wykonania dowolną komendę. Ale pojawiają się schody właśnie przy wklejeniu tej komendy, a czy w ogóle jest to wykonalne?
Da się uruchomić terminal z parametrem tak aby już sam wykonywał dane działanie, chodzi mi o analogie do tego
firefox http://www.ubuntu.pl - otwiera się firefox ze stroną
http://www.ubuntu.pl ?
Odp: Java - wykonywanie poleceń terminala
: 14 lis 2009, 23:06
autor: beluosus
Scofield1 pisze:Da się uruchomić terminal z parametrem tak aby już sam wykonywał dane działanie, chodzi mi o analogie do tego
firefox http://www.ubuntu.pl - otwiera się firefox ze stroną
http://www.ubuntu.pl ?
Tak, do tego służy przeważnie parametr -e.
Odp: Java - wykonywanie poleceń terminala
: 14 lis 2009, 23:16
autor: Scofield1
beluosus pisze:Tak, do tego służy przeważnie parametr -e.
U mnie nie działa

. Terminal zaraz się zamyka. Jakieś inne propozycje komuś się nasuwają?
Odp: Java - wykonywanie poleceń terminala
: 14 lis 2009, 23:49
autor: beluosus
Zależy od terminala, np:
Kod: Zaznacz cały
xterm -e "echo test; sleep 1"
gnome-terminal -e "echo test; sleep 1"
Na xtermie zadziała, a na gnomowym nie.
Odp: Java - wykonywanie poleceń terminala
: 15 lis 2009, 00:10
autor: Scofield1
Dzięki, przydało się

Prosiłbym o nie zamykanie tematu bo pewnie w przyszłości tutaj coś napiszę
