Threads Prozess kann nicht über die GUI gestartet werden

pumu

Mitglied
Hallo Zusammen,

Ich bin noch ein Neuling und habe vermutlich einen ziemlich doofen Fehler gemacht, allerdings haben mir ähnliche Themen und google.de nicht geholfen eine Lösung für mein Problem zu finden.

Folgende Klasse soll mit Hilfe eines übergebenen Strings einen Prozess starten.
Das funktioniert auch theoretisch über eine interne Main-Methode, allerdings soll der Prozess durch einen Button einer GUI gestartet werden. Dies funktioniert leider nicht.

Java:
public class RunAllFoodSeq implements Runnable {
   
    private String com;
   
    public RunAllFoodSeq(String com) {
        super();
        this.com = com;
    }
   

    @Override
    public void run() {
        Process process;
        try{
            process = Runtime.getRuntime().exec(com);
            try{
                process.waitFor();
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(process.exitValue() == 0)
            {
                System.out.println("Command Successful");
            }
            else
            {
                System.out.println("Command Failure");
            }   
        }catch(IOException e){
            e.printStackTrace();
        }
    }
   
}

Hier findet Ihr meinen Versuch, der den Prozess starten soll.

Java:
runButton.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e){       
                try {
                    runAllAction(e);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
                           
            }
        });

Java:
public void runAllAction(ActionEvent e) throws InterruptedException {
       
        String com = "perl AllFoodSeq_v1.0.4.pl"
                + " "
                + "/home/bio-03/workspace/Perltest/threadtestPB"
                + " -g "+ "/media/bio-03/TOSHIBA/Master/AFS/2-Referenzgenomebowtie/"
                + " -G /media/bio-03/TOSHIBA/Master/AFS/2-Referenzgenomebowtie/Genomes.txt"
                + " -m /media/bio-03/TOSHIBA/Master/AFS/2-Referenzgenomebowtie/ConfigII.txt"
                + " -q /media/bio-03/TOSHIBA/Master/AFS/3-Trimmed-Data-MPIuII-fastx/MP-I/113003719_S15_L001_R1_001.fastq.trimmed_II.pe_for.fastq"
                + " /media/bio-03/TOSHIBA/Master/AFS/3-Trimmed-Data-MPIuII-fastx/MP-I/113003719_S15_L001_R1_001.fastq.trimmed_II.pe_rev.fastq"
                + " -o 3";
       
        Runnable first = new RunAllFoodSeq(com);
        Thread firstThread = new Thread(first);
        firstThread.start();
       
    }

Wenn der Knopf gedrückt wird, startet zwar der Thread, aber in der Ausgabe erscheint "Command Failure", sprich der Prozess konnte nicht gestartet werden.

Vielleicht findet ja jemand meinen Fehler und kann mir auf die Sprünge helfen.

Ich hoffe ich habe nicht zu viele Fehler beim Stellen dieser Frage gemacht.
 
Also bei der Fehlermeldung sollte der Prozess gelaufen sein aber eben nicht 0 zurück geliefert haben. Was er zurück geliefert hat wäre mal interessant zu wissen oder nicht?
 
Hallo,
danke für eure schnellen Antworten.
Der Prozess liefert also nicht 0 zurück, sondern 2.
Exceptions wurden nicht geworfen.

Der Prozess startet eigentlich ein anderes Programm, welches bestimmte Dateien erzeugt, aber dies ist nicht erfolgt.
 
Zuletzt bearbeitet:
Alles klar, ich komme der Lösung näher, aber ich habe immer noch ein Problem.
Ich habe mir jetzt durch folgenden Code mal den Fehler ausgeben lassen:
Java:
process = Runtime.getRuntime().exec(com);
            try{
                process.waitFor();
                int len;
                if((len = process.getErrorStream().available()) > 0){
                    byte[] buf = new byte[len];
                    process.getErrorStream().read(buf);
                    System.err.println("Command error:\t\""+ new String(buf)+"\"");
                }

Allerdings bekomme ich dann folgende Fehlermeldung:

Command error: "Can't open perl script "AllFoodSeq_v1.0.4.pl": Datei oder Verzeichnis nicht gefunden
"

Also er findet die Datei, oder das Verzeichnis nicht, aber er findet es, wenn ich es nicht aus der GUI starte? Verstehe nicht wie das passieren kann.

edit: ok doch, oh meine Güte, was ein dummer Fehler!

Danke für die Hinweise
 
Hab schon lange nichts mehr mit Process gemacht, aber kann es sein, dass Du noch das working directory anpassen musst. Die Fehlermeldung klingt für mich danach...
 
Entschuldigt bitte, ich dachte für alle andern wäre es schon klar gewesen.

Folgende Fehlermeldung ist ja aufgetreten.
Command error: "Can't open perl script "AllFoodSeq_v1.0.4.pl": Datei oder Verzeichnis nicht gefunden
"
Ich hatte es einfach verpasst die Working Directory anzupassen, da meine Testklasse, die das Programm vorher gestartet hat, in dem gleich Ordner lag. Musste nur den Pfad des Perlprogramms anpassen.

In meinem Fall statt:
"perl AllFoodSeq_v1.0.4.pl"

"perl /home/bio-03/workspace/Perltest/AllFoodSeq_v1.0.4.pl"

Viele Grüße
 

Zurück
Oben