Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    35

    [Java]Caricare un programma esterno

    Ciao a tutti!

    Vorrei chiamare un eseguibile JAR esterno dall'interno del mio plugin per Eclipse che sto sviluppando.

    All'interno del metodo "run" che gestisce il ciclo di vita del plugin ho inserito le seguenti istruzioni :

    codice:
    	    String [] rigaComando = {"java","-jar","GenPlot.jar"};
    	    
    	    try{
    			Process proc = Runtime.getRuntime().exec(rigaComando);
    
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
            
    		System.out.println("Ho eseguito");
    Il programma esegue la println quindi presumo che il JAR esterno venga regolarmente caricato,però non visualizzo l'output del programma esterno(che è una finestra JFrame)..

    Come faccio a visualizzare l'output?

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ciao ecco qua.. questa fa proprio al caso tuo..

    codice:
    public class RunnableHelper {
    	
    	public int runFile(String pathfile){
    		
    		int exitVal = 0;
    		String errors = "";
    		
    		try {
    
    			Runtime rt = Runtime.getRuntime();
    			Process proc = rt.exec(pathfile);
    			
                StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");            
                StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");
    
                errorGobbler.start();
                outputGobbler.start();
    			
    			exitVal = proc.waitFor();
    			errors = errors + "Process exitValue: " + exitVal;
    			
    		} catch (Throwable t){
    			
    			// SCRITTURA LOG
    			System.out.println("JAVA ERROR " + t.getMessage());
    			exitVal = -1;
    			
    		}
    		
    		return exitVal;
    
    	}
    	
    	// CLASSE INTERNA PER LETTURA STREAM
    	class StreamGobbler extends Thread
    	{
    	    InputStream is;
    	    String type;
    	    
    	    StreamGobbler(InputStream is, String type)
    	    {
    	        this.is = is;
    	        this.type = type;
    	    }
    	    
    	    public void run()
    	    {
    	        try
    	        {
    	            InputStreamReader isr = new InputStreamReader(is);
    	            BufferedReader br = new BufferedReader(isr);
    	            String line=null;
    	            while ( (line = br.readLine()) != null)
    	                System.out.println(type + ">" + line);    
    	            } catch (IOException ioe)
    	              {
    	                ioe.printStackTrace();  
    	              }
    	    }
    	}
    }
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    35
    Il compilatore mi dà errore con l'istanza di StreamGobbler e mi fa fare uno strano casting per InputStream.

    codice:
                StreamGobbler errorGobbler = new StreamGobbler((InputStream) proc.getErrorStream(), "ERROR");            
                StreamGobbler outputGobbler = new StreamGobbler((InputStream) proc.getInputStream(), "OUTPUT");


    Probabilmente non mi funziona per questo motivo..

    Sai a cosa può essere dovuto?

    Sono in difficoltà da ieri su questa cosa,mi servirebbe un aiuto per risolverla..

  4. #4
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    stano io uso compilatore 1.4 e non da controindicazioni, lo uso in quais tutti i progetti..
    gli import non te li ho messi nel codice..
    te li posto qui a parte

    codice:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    35
    Ho risolto il problema. In pratica usando Eclipse se importavo automaticamente la libreria per InputStream mi importava un'altra libreria invece che java.io.InputStream.

    Ora non mi genera più errori di compilazione però purtroppo non riesco ad eseguire comunque il jar file.
    Io ho un eseguibile JAR sul desktop funzionante(se faccio doppio click mi genera il grafico)però avviandolo con le classi che mi hai indicato mi genera errore.

    Con le istruzioni :

    codice:
    RunnableHelper run = new RunnableHelper();
    
    run.runFile((System.getProperty("user.home") + "/Desktop/Plot.jar"));
    mi viene generato l'errore JAVA ERROR Cannot run program "C:\Users\Ste/Desktop/Plot.jar": CreateProcess error=193, %1 non è un'applicazione di Win32 valida

  6. #6
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    no certo... tu non devi avviare il jar ma tutta la stringa (come se fossi in dos) per avviare il jar !!

    codice:
    java -jar FileEseguibile.jar
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    35
    Ok finalmente ci sono riuscito. Grazie mille per l'aiuto,è stato fondamentale.

  8. #8
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    figurati è sempre un piacere
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.