Προς το περιεχόμενο

Εκτέλεση εξωτερικού προγράμματος με Java


eirinikp

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια,

Θέλω να φτιάξω ένα πρόγραμμα Java το οποίο θα εκτελεί ένα .exe που θα υπάρχει κάπου και στη συνέχεια θα παρακολουθεί τη "ζωή" του executable αυτού και όταν αυτό τελειώσει ή διακοπεί για κάποιο λόγο να βγάζει το πρόγραμμά μου κάποιο κατάλληλο μήνυμα.

Έχει κανείς κάποια ιδέα από πού να αρχίσω και πού να τελειώσω? Τι θα μπορούσε να μου φανεί χρήσιμο? Οποιαδήποτε βοήθεια?

(Έχω μια μικρή ιδέα από Java, αλλά όχι τόσο προχωρημένα πράγματα...)

Ευχαριστώ εκ των προτέρων.

Δημοσ.
ριξε μια ματια εδω και κανε και ενα search στο google και ολο και κατι θα βρεις :-)

 

Thanks!!!

Θα το κοιτάξω και αν έχω απορία θα στείλω.

Ευχαριστώ πολύ!!!:-)

Δημοσ.

Οι σύνδεσμοι που μου στείλατε ήταν εξαιρετικά χρήσιμοι και ευχαριστώ πάρα πολύ!

Μήπως έχετε και κάποια πρόταση για το πώς να μπορώ όποτε θέλω, να κάνω pause το πρόγραμμα που εκτελώ, και όποτε θέλω να ξανακάνω Resume?

Ευχαριστώ και πάλι!

Δημοσ.

OK, επειδή δεν βλέπω συμμετοχή, ας τη θέσω αλλιώς την ερώτηση:

Δε θέλω να σταματήσω το πρόγραμμα που εκτελώ για κάποια δευτερόλεπτα και μετά να το ξανααρχίσω. Θέλω να πατάει ο χρήστης ένα κουμπάκι και το πρόγραμμα που εκτελείται να παγώνει, μέχρι να πατήσει ο χρήστης Resume για να ξανααρχίσει να δουλεύει.

Αυτά που βρίσκω κάνοντας αναζήτηση παγώνουν το πρόγραμμα για προκαθορισμένο χρονο... :-(

Έχετε κάποια συμβουλή? Κάποιο χρήσιμο σύνδεσμο????

Ό,τι έχετε ευχαρίστηση! :-)

Δημοσ.

Τελικά βρήκα από μόνη μου κάποια άκρη (ελπίζω).

Φταίει που μέχρι τώρα δεν είχα καλή σχέση με τα threads...

Για όσους στο μέλλον ενδιαφερθούν για την κατάληξη αυτού του topic, έχω να τους στείλω εδώ

Δημοσ.

Τελικά δεν είναι τόσο απλά τα πράγματα...:-(

 

Στον κώδικά μου υπάρχει το εξής κομμάτι:

>
   public class ThreadRun extends Thread { 	 

       public void run( ) { 	 
          try {     
               Runtime rt = Runtime.getRuntime();
               proc = rt.exec(pathname); /*pathname einai to monopati enos executable*/
               InputStream stderr = proc.getErrorStream();
               InputStreamReader isr = new InputStreamReader(stderr);
               BufferedReader br = new BufferedReader(isr);
               String line = null;
               while ( (line = br.readLine()) != null)
                   System.out.println(line);
               
               int exitVal = proc.waitFor();
               if( exitVal == 0 ) {
                   messageFrame( "Normal exit" );
               } else {
                   messageFrame( "NOT normal exit" );
               }
           } catch (Throwable t) {
               /*handle exception*/
           }
       } 

       public void pause( ) {
           try {
               proc.wait();
           } catch(  InterruptedException ie ) {
               /*handle exception*/
           } catch( IllegalMonitorStateException imse ) {
               /*handle exception*/
           }
       }

   } 	 

 

Όμως όταν πατήσω το κουμπάκι που καλεί την pause, δυστυχώς το πρόγραμμα με γράφει και το εκτελέσιμο δεν παγώνει αλλά συνεχίζει να τρέχει μέχρι να τερματιστεί...

τι μπορεί να φταίει???

Δημοσ.

Είσαι σίγουρη ότι δεν παίρνεις κάποιο exception? Για άλλαξέ το σε

 

>
public void pause( ) {
           try {
               proc.wait();
           } catch(  InterruptedException ie ) {
               ie.printStackTrace();
           } catch( IllegalMonitorStateException imse ) {
               imse.printStackTrace();
           }
       }

 

Παρεμπιπτόντως παύση εξωτερικού προγράμματος δε συνιστάται καθώς δεν έχεις έλεγχο του προγράμματος παρά μόνο του νήματος στο οποίο τρέχει.

Δημοσ.
Είσαι σίγουρη ότι δεν παίρνεις κάποιο exception? Για άλλαξέ το

Ναι είμαι σίγουρη γιατί βάζω να μου τυπώνει τι exception πετάει μέσα στο catch.

 

Παρεμπιπτόντως παύση εξωτερικού προγράμματος δε συνιστάται καθώς δεν έχεις έλεγχο του προγράμματος παρά μόνο του νήματος στο οποίο τρέχει.

Βασικα το πρόγραμμα που θα τρέχω το φτιάχνω εγώ από το Matlab. Εσύ τι εννοείς? Οτι δεν πρόκειται ποτέ να γίνει παύση στο εκτελέσιμο ή ότι είναι επικίνδυνο?

Δημοσ.
Ναι είμαι σίγουρη γιατί βάζω να μου τυπώνει τι exception πετάει μέσα στο catch.

 

Τότε δεν έχεις υλοποιήσεις σωστά το νήμα. Θα πρέπει να σταματήσεις το νήμα ThreadRun πρώτα.

 

Βασικα το πρόγραμμα που θα τρέχω το φτιάχνω εγώ από το Matlab. Εσύ τι εννοείς? Οτι δεν πρόκειται ποτέ να γίνει παύση στο εκτελέσιμο ή ότι είναι επικίνδυνο?

 

Δεν είμαι σίγουρος ποιες θα είναι οι επιπτώσεις. Απλώς να ξέρεις ότι το εξωτερικό πρόγραμμα που σηκώνεις είναι ανεξάρτητο από το νήμα που το σηκώνει. Άρα μπορείς να σταματήσεις το νήμα αλλά δύσκολο να σταματήσεις και το εξωτερικό πρόγραμμα. Εκτός και αν το έχεις γράψει έτσι ώστε να δέχεται εντολές και να παύει.

Δημοσ.

Τελικά το πρόγραμμα που θα εκτελώ θα πρέπει να δέχεται εντολές από το Java πρόγραμμα οι οποίες να το κάνουν παύση. Ομοίως για επανεκκίνηση. Το executable μου είναι σε Matlab και προς το παρόν η μόνη ιδέα που έχω είναι να βλέπει ανα διαστήματα τα περιεχόμενα ενός προσωρινού αρχείου.

Εκτός του ότι αυτό ακόμα δεν το έχω ολοκληρώσει για να διαπιστώσω αν είναι καλό, έχω δύο απορίες:

1) Υπάρχει καμία καλύτερη ιδέα εκτός από αυτή του προσωρινού αρχείου?

2) Είδα ότι στη Matlab γίνεται pause με κάποιον Job Manager κλπ κλπ... Έχει ποτέ κανείς ασχοληθεί με κάτι τέτοιο?

Δημοσ.

ρίξε μία ματία εδώ!

http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html

http://www-math.mit.edu/~spielman/ECC/javaMatlab.html

 

Πάντως η ιδέα με το κοινό προσωρινό αρχείο είναι δυνατή αλλά δεν συνίστατε! Οποιοδήποτε και από τα 2 προγράμματά σου μπορεί να σκάσει από στιγμη σε στιγμή με IO exception.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...