Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Ciao a tutti.
<BR>Vorrei farmi una piccola interfaccia grafica in java per l´utilizzo di swaret.
<BR>Niente di complicato o utile.... in realtà lo vorrei fare per sparimentare.
<BR>In java non dovrei aver problemi, l´unico intoppo riguarda il passagio dei comandi dal mio programma al sistema operativo....
<BR>Es: Voglio passare dal mio programma java il seguente comando al sistema:
<BR>
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>swaret --update
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->
<BR>
<BR>Cosa banale.... però al sistema come faccio a passarglielo....
<BR>
<BR>Grazie tante, su google non ho trovato la risposta, probabilmente perchè non ho cercato bene....
<BR>
<BR>Ciao <br>
Di solito dovresti usare la classe Runtime, per lanciare i comandi del sistema operativo: in pratica ottieni l´oggetto di tipo Runtime con il metodo statico getRuntime():
<BR>
<BR><code>Runtime oggetto = Runtime.getRuntime();</code>
<BR>
<BR>Successivamente, utilizzi il metodo exec(String command) della classe Runtime per eseguire i comandi che desideri:
<BR>
<BR><code>oggetto.exec(swaret --update);</code>
<BR>
<BR>Se hai Java 1.5.0, puoi trovare un riassunto dei metodi della classe Runtime (e non solo) <a href=http://java.sun.com/j2se/1.5.0/docs/api/>qui</a>.
<BR>Spero di esserti stato utile.
<BR>Ciao
<BR><BR><BR>[ Questo Messaggio è stato Modificato da: gianPrazio il 23-01-2005 03:01 ]<br>
Figurati, MDS... il fatto e´ che con le classi di Java e´ mooolto facile perdersi: ce ne sono troppe! Leggersi tutta la documentazione e´ impensabile...
<BR>A, comunque, scusa... l´argomento del metodo exec deve essere una stringa e per cui la sintassi corretta e´:
<BR>
<BR><code>oggetto.exec("swaret --update");</code>
<BR>
<BR>e non
<BR>
<BR><code>oggetto.exec(swaret --update);</code> ....
<BR>
<BR>Saranno stati i fumi dell´alcool a indurmi in errore, ieri notte... :-]
<BR>ciaoz<br>
Grazie tante, ma leggendo la documentazione me ne ero accorto dell´imprecisione.... comunque era il concetto che mi interessava.
<BR>
<BR>Volevo anche catturare l´otput del comando bash in esecuzione....
<BR>Così a spanne credevo di fare ciò girando l´output bash su un file di testo e poi ogni mezzo secondo (tramite thread) fare una letttura da quel file e farmela stampare a video....
<BR>Che ne dici?
<BR>Secondo te c´è una via + semplice ed efficiente?
<BR>Ciao e grazie... <br>
Quella di usare dei Thread potrebbe essere una soluzione.... in questo momente non me ne vengono in mente di alternative... e´ molto tempo che non Javo...
<BR>Se trovo qualche altro metodo per stampare l´output di un comando bash su standard output, te lo faccio sapere.
<BR>Ciaoz<br>
x fare una roba simile in C userei la funzione popen(), magari java ha qualcosa di simile, prova a cercare popen nella documentazione.
<BR>altrimenti puoi ridirigere lo stdout/err su un file e poi leggere quello, ma non è il max della vita.<br>
Allora la cosa non è molto lontana da quello che gia ti è stato consigliato.
<BR>
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>...
<BR>Runtime runtime = Runtime.getRuntime() ;
<BR>Process swaret = runtime.exec("swaret --update");
<BR>InputStream swout = swaret.getInputStream();
<BR>BufferedReader buff = new BufferedReader(new InputStreamReader(swout));
<BR>String linea = null;
<BR>while((linea = buff.readLine()) != null)
<BR>{// Un ciclo per ogni linea `linea`
<BR> System.out.println(linea);
<BR>}
<BR>...
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->
<BR>
<BR>Dovrebbe funzionare..
<BR>Naturalmente io ho utilizzato lo BuferedReader che è comodo per le letture di testo, ma puoi utilizzare lo stream che piu ti serve..forse in questo caso è proprio questo il piu` utile.
<BR>
<BR>
<BR><br>
useless, tu hai 3000 ragioni, il c è + elegante, + pratico, + veloce (nell´esecuzione)... ma se devi scrivere un´interfaccia grafica java è un attimino + potente...
<BR>
<BR>bye, rob<br>
Ciao a tutti di nuovo.
<BR>Ho quasi finito l´interfaccia grafica per Swaret....
<BR>Riesco a passargli il comando e a visualizzarne l´output (tipo update, list).
<BR>I problemi si verificano invece sull´install, quando invece viene richiesta interattività. Mi spiego io ho previsto un field dove inserire le risposte richieste ed un bottone per poter passare al sistema le risposte, solo che quando lancio l´install il programma si blocca sulla domanda di voler installare o no un pacchetto (in realtà la domanda non me la fa nemmeno visualizzare).
<BR>Il codice dei comandi è il seguente. Ovviamnete ci sono altre classi per la grafica e per la gestione degli eventi.
<BR>Che ne dite?
<BR>
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>try
<BR> {
<BR>
<BR>
<BR> Process ls = runtime.exec(command);
<BR> InputStream lsOut = ls.getInputStream();
<BR> BufferedReader buff = new BufferedReader(new InputStreamReader(lsOut));
<BR> String linea = null;
<BR>
<BR> while((linea = buff.readLine()) != null)
<BR>
<BR> {// Un ciclo per ogni linea `linea`
<BR> GuiManager.setContenutoAreaTestoGui(linea);
<BR> //System.out.println(linea);
<BR> }
<BR> //linea = buff.readLine();
<BR> }
<BR>
<BR> catch (Exception e)
<BR> {
<BR> e.printStackTrace();
<BR> }
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End --><br>
se da interfaccia grafica riesci a selezionare univocamente il pacchetto che si deve installare/rimuovere/aggornare, puoi lanciare swaret con l´opzione -a (auto), del genere:
<BR>swaret --install zlib -a
<BR>
<BR>ciao, rob
<BR>
<BR>p.s. saluta anche tuo fratello :-] <br>