Java - wykonywanie poleceń terminala

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Scofield1
Piegowaty Guziec
Piegowaty Guziec
Posty: 22
Rejestracja: 26 kwie 2009, 22:48
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Java - wykonywanie poleceń terminala

Post 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?
Awatar użytkownika
Kastagir
Sędziwy Jeż
Sędziwy Jeż
Posty: 89
Rejestracja: 09 sty 2006, 16:36
Płeć: Mężczyzna
Wersja Ubuntu: 17.04
Środowisko graficzne: Inne
Architektura: x86_64

Odp: Java - wykonywanie poleceń terminala

Post 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());
        }
    }
}
"Search you should use, my young padawan"
Scofield1
Piegowaty Guziec
Piegowaty Guziec
Posty: 22
Rejestracja: 26 kwie 2009, 22:48
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Java - wykonywanie poleceń terminala

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

      
    }

}
Awatar użytkownika
Kastagir
Sędziwy Jeż
Sędziwy Jeż
Posty: 89
Rejestracja: 09 sty 2006, 16:36
Płeć: Mężczyzna
Wersja Ubuntu: 17.04
Środowisko graficzne: Inne
Architektura: x86_64

Odp: Java - wykonywanie poleceń terminala

Post autor: Kastagir »

w konsoli

Kod: Zaznacz cały

java ProcTest polecenie
np.

Kod: Zaznacz cały

java ProcTest ls
"Search you should use, my young padawan"
Scofield1
Piegowaty Guziec
Piegowaty Guziec
Posty: 22
Rejestracja: 26 kwie 2009, 22:48
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Java - wykonywanie poleceń terminala

Post 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 ?
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Java - wykonywanie poleceń terminala

Post 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.

Kod: Zaznacz cały

terminal -e htop
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Scofield1
Piegowaty Guziec
Piegowaty Guziec
Posty: 22
Rejestracja: 26 kwie 2009, 22:48
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Java - wykonywanie poleceń terminala

Post autor: Scofield1 »

beluosus pisze:Tak, do tego służy przeważnie parametr -e.

Kod: Zaznacz cały

terminal -e htop
U mnie nie działa :-(. Terminal zaraz się zamyka. Jakieś inne propozycje komuś się nasuwają?
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Java - wykonywanie poleceń terminala

Post 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.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Scofield1
Piegowaty Guziec
Piegowaty Guziec
Posty: 22
Rejestracja: 26 kwie 2009, 22:48
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: Java - wykonywanie poleceń terminala

Post autor: Scofield1 »

Dzięki, przydało się ;-) Prosiłbym o nie zamykanie tematu bo pewnie w przyszłości tutaj coś napiszę ;-)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości