Newsgroup: it.comp.java
Titolo: runtime.exec()

Sicuramente il metodo che ho usato avrà qualche evidente pecca, ma per ora
mi basta che funzioni. Of course sono bene accetti consigli su metodi
migliori da utilizzare per fare quello che devo fare...
Scenario:
Ho un programma che lancia 3 thread:
il primo legge in continuazione da un DB e inserisce i nuovi record in un
vettore (stringhe)
il secondo visualizza a video i record leggendoli dal vettore
il terzo esegue un comando di sistema quando una certa stringa compare nel
vettore
Il problema è che il terzo thread sembra non riuscire ad eseguire il
comando.
Il codice della classe incriminata è il seguente (non ridete...):
import java.util.Vector;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Writer
    implements Runnable
{
  private String firstName;
  private String secondName;
  private long aWhile;
  private Vector messages;
  public Writer(Vector messages)
  {
    this.messages = messages;
  }
  public void run()
  {
    System.out.println("Running thread : Writer");
    try
    {
      while(true)
      {
        for(int i=0; i<messages.size(); i++)
        {
          Thread.sleep(1000);
          String sms = (String)messages.get(i);
          if("get:".equals(sms.substring(0,4)))
          {
            System.out.println("Writer: Received request: ");
            String request = sms.substring(4,sms.length()).trim();
            System.out.println(request);
            if("time".equals(request))
            {
              System.out.println(sysRun("time"));
            }
            else if("whois".equals(request))
            {
              System.out.println(sysRun("uname -a"));
            }
            else
            {
              System.out.println("Unable to process the request...");
            }
          }
        }
      }
    }
    catch (InterruptedException ex)
    {
      System.out.println(ex.getMessage());
    }
    catch (Exception ex)
    {
      System.out.println(ex.getMessage());
    }
  }
  String sysRun(String command)
  {
    Runtime runtime = Runtime.getRuntime();
    Process process = null;
    String output;
    String returnedString = null;
    try
    {
      process = runtime.exec(command);
      System.out.println("###### Running command: "+command);
      BufferedReader ls_in = new BufferedReader(new
InputStreamReader(process.getInputStream()));
      try
      {
        while ((output = ls_in.readLine()) != null)
        {
          System.out.println("#######"+output);
          returnedString += output;
        }
      }
      catch (IOException e)
      {
        System.exit(0);
      }
    }
    catch(IOException ex)
    {
      System.out.println(ex.getMessage());
    }
    catch(Exception ex)
    {
      System.out.println(ex.getMessage());
    }
    return returnedString;
  }
}
Grazie per eventuali dritte...
Raffaele
-- 
Raffaele Castagno
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 comando.
Ho risolto il problema.
per i posteri:
runtime.exec() permette di eseguire un programma, ma non direttamente un
comando di sistema.
Quindi se voglio eseguire un programma mi basterŕ fare:
runtime.exec("mioprogramma");
possibilmente includendo l'intero path (sotto windows sembra cercare il
programma nel path...)
per eseguire un comando di sistema, come per es un semplice dir č
necessario utilizzare l'interprete dei comandi:
runtime.exec("cmd /c dir");
anche qui č bene inserire l'intero path.
Saluti
