Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Lanciare eseguibile (.exe) da java

    Come si fa a lanciare un eseguibile (.exe) da java? Il file .exe l'ho creato con matlab e richiede un parametro in ingresso. Per avviare il prompt di ms-dos ho questo codice funzionante:

    import java.util.*;
    import java.io.*;
    import java.lang.*;

    public class lancio{
    public static void main(String[] args){
    try{
    Runtime run = Runtime.getRuntime();
    run.exec("cmd /c start");
    }
    catch(Exception e){
    e.printStackTrace();
    }
    }
    }

    Io invece voglio far girare l'eseguibile presente in una cartella nel desktop passandogli il parametro pure!
    Aiutatemi per favore!

  2. #2
    Se provi così?

    run.exec("\"C:\\Documents and Settings\\utente\\Desktop\\applicazione.exe /comandi\"");
    "Na' sedia te vojo tirà!"

  3. #3
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ti conviene usare questa classettina che legge anche output stream ed error stream
    gli stream se sono prodotti dalla tua applicazione li DEVI leggere se no si inceppa tutto

    codice:
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import org.apache.log4j.Level;
    
    public class RunnableHelper {
    	
    	private String errorStream = "";
    	private String outputStream = "";
    	private String errorRAS = "";
    	
    	// FUNZIONE PER ESEGUIRE UN FILE .EXE O .BAT
    	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();
    			
    			// 1 secondo di attesa (i thread potrebbero star ancora leggendo sulle macchine più veloci)
    			Thread.sleep(1000);
    			errorStream = errorGobbler.getTextStream();
    			outputStream = outputGobbler.getTextStream();
    
    			errors = errors + "Process exitValue: " + exitVal;
    			
    		} catch (Throwable t){
    			
    			exitVal = -1;
    			
    		}
    		
    		return exitVal;
    
    	}
    	
    	public String getErrorStream() {
    		return errorStream;
    	}
    
    	public String getOutputStream() {
    		return outputStream;
    	}
    	
    	// CLASSE INTERNA PER LETTURA STREAM
    	class StreamGobbler extends Thread
    	{
    	    InputStream is;
    	    String type;
    	    String textStream;
    	    
    	    StreamGobbler(InputStream is, String type)
    	    {
    	        this.is = is;
    	        this.type = type;
    	    }
    	    
    	    public void run()
    	    {
    	        try
    	        {
    	        	boolean firstErr = false;
    	        	textStream = "";
    	            InputStreamReader isr = new InputStreamReader(is);
    	            BufferedReader br = new BufferedReader(isr);
    	            String line=null;
    	            while ( (line = br.readLine()) != null){
    	            	if(type.equalsIgnoreCase("ERROR")){
    	            		lh.debugOperazioni(LOGGER_PREFIX, "OUTPUT STREAM >" + line, this.getClass().getName(), "run()", Level.ERROR_INT);
    	            	}else{
    	            		lh.debugOperazioni(LOGGER_PREFIX, "OUTPUT STREAM >" + line, this.getClass().getName(), "run()", Level.INFO_INT);
    	            	}
    	            	
    	            	// memorizzo tutto l'output
    	            	textStream = textStream + line + "\r\n";
    
    	            }
    	        } catch (IOException ioe)
    	        {
    	            lh.debugOperazioni(LOGGER_PREFIX, "JAVA ERROR " + ioe.getMessage(), this.getClass().getName(), "run()", Level.DEBUG_INT);
    	        }
    	    }
    
    		public String getTextStream() {
    			return textStream;
    		}
    
    	}
    
    }
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  4. #4
    Su comandi che devo scrivere? Cioè quale comando devo dare per l'avvio?
    Per esempio se avvio l'eseguible (ciao.exe) dal prompt di ms-dos scrivo (il parametro che devo passare è un path in questo caso scrivo direttamente quello per il desktop):

    C:\Users\Administrator\Desktop>ciao C:\Users\Administrator\Desktop

    e avvia.

    Qui che devo fare?!

    public class lancio{
    public static void main(String[] args){
    try{
    Runtime run = Runtime.getRuntime();
    run.exec("\"C:\\Users\\Administrator\\Desktop\\cia o.exe /comandi\"");
    }
    catch(Exception e){
    e.printStackTrace();
    }
    }
    }

    sempre se è giusto ...ktop\\ciao.exe /comandi\"");... ??? che comandi devo dare per l'avvio?

  5. #5
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ma non hai nemmeno preso in considerazione la classe che ti ho dato !!


    te lo ripeto, guarda che se il tuo exe produce un output run.exe non ti è sufficiente, DEVI leggere lo stream di output !!
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  6. #6
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Al di là della classe di Morphy (cui comunque puoi dare almeno un'occhiata, visto che è stato gentile a postartela), i "comandi" sono i parametri di cui ha bisogno il tuo programma per avviarsi, o di cui ha bisogno per realizzare particolari funzioni: non sapendo che eseguibile è, naturalmente non saprei dirti quali sono.
    Ma se non hai idea di cosa ci vada, molto probabilmente il tuo .exe non ne ha bisogno...

  7. #7
    Scusa se non ho più risposto morphy79, lo faccio ora, la tua classe è stata utilissima!!! Funziona alla grande!

    Solo che non capisco l'errore che da per il metodo debugOperazioni nella classe interna, è chiaro che StreamGobbler è una sottoclasse di Thread ma il metodo debugOperazioni che fa? inoltre utilizza l'oggetto lh che non è inizializzato?
    Ho solo questi 2 interrogativi, magari banali, ma sono un pò arrugginito con Java =( . Ho dato un'occhiata qui http://java.sun.com/j2se/1.4.2/docs/...ng/Thread.html . Chiedo solo un chiarimento, per il resto funziona e ti ringrazio di cuore!!

  8. #8
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    ops.. mi è sfuggito lh.. niente è un oggetto di una classe che uso io per il log4j..
    ignoralo e tratta l'eccezione come meglio credi, anche con il solito printStackTrace va benissimo
    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.