Avatar billede nielsbrinch Nybegynder
21. januar 2002 - 13:25 Der er 19 kommentarer og
1 løsning

Eksekvering af fil

Hvordan eksekverer jeg en fil i mit javaprogram. Jeg vil f.eks. eksekvere c:\\program files\\GTS\\gts.exe

Det er selvfølgelig en funktion der kun vil virke i Windows-baserede systemer, men det skider jeg højt og flot på :-)

Man må kunne køre noget i retningen af exec(String path) på en eller anden JDK-klasse, men jeg ved ikke hvilken.
Avatar billede disky Nybegynder
21. januar 2002 - 13:27 #1
System.exec(\"c:\\\\program files\\\\GTS\\\\gts.exe\");
Avatar billede nielsbrinch Nybegynder
21. januar 2002 - 13:28 #2
Det var dælme hurtigt!! 2 minutter og 2 sekunder efter jeg sendte spørgsmålet, fik jeg et korrekt og præcist svar tilbage - fantastisk!

Det burde næsten give dobbelt point.
Avatar billede disky Nybegynder
21. januar 2002 - 13:29 #3
virkede det som det skulle ?
Avatar billede disky Nybegynder
21. januar 2002 - 13:32 #4
Jeg undskylder

den korrekte er:

Runtime.exec(\"c:\\\\program files\\\\GTS\\\\gts.exe\");
Avatar billede nielsbrinch Nybegynder
21. januar 2002 - 13:36 #5
Ok, kom også frem til at der ikke fandtes exec under System. Tak for hjælpen.
Avatar billede disky Nybegynder
21. januar 2002 - 13:43 #6
Det var da så lidt :-)
Avatar billede nielsbrinch Nybegynder
21. januar 2002 - 13:47 #7
Sådan ser min lille kode ud:
----------------------------

class Maintester
{
    public static void main (String args[])
    {
        E e = new E(\"C:\\\\Program Files\\\\GTS\\\\GTS.exe\");
    }
}

OG

class E
{
    public E(String st)
    {
        init(st);
    }
   
    public void init(String st)
    {
        Runtime.exec(st); // Her er compilerfejlen
    }
}

Fejl:

E.java:10: non-static method exec(java.lang.String) cannot be referenced from a static context
        Runtime.exec(st);

Jeg har prøvet at køre det direkte i Maintester også, men den siger også det samme der. Skal jeg implementere et eller andet måske, som er en selvfølge for en erfaren programmør?
Avatar billede disky Nybegynder
21. januar 2002 - 13:57 #8
Prøv med denne her:

import java.io.*;

public class runner
{
   
    /** Creates new runner */
    public runner()
    {
    }
   
    /**
    * @param args the command line arguments
    */
    public static void main(String args[])
    {
        try
        {
            Runtime rt = Runtime.getRuntime();
            Process proc = rt.exec(\"C:\\\\Program Files\\\\GTS\\\\GTS.exe\");
        }
        catch (IOException e)
        {
        }
      }
}
Avatar billede nielsbrinch Nybegynder
21. januar 2002 - 13:59 #9
Jaa!
Avatar billede disky Nybegynder
21. januar 2002 - 14:17 #10
Jeg gætter på det virker nu ?
Avatar billede nielsbrinch Nybegynder
21. januar 2002 - 15:08 #11
Jaa!
Avatar billede disky Nybegynder
21. januar 2002 - 15:10 #12
kanon, så fik vi løst det :-)

Tak for point, og undskyld det bøvl der var, pga. dårlig hukommelse :-)
Avatar billede carstenknudsen Nybegynder
21. januar 2002 - 15:20 #13
Ofte er det rart at vide hvad en ekstern process
returner hvis noget går galt; det kan læses således:
Process p = Runtime.getRuntime().exec( \"...\" );
InputStream pin = p.getErrorStream();
InputStreamReader cin = new InputStreamReader( pin );
BufferedReader in = new BufferedReader( cin );
Avatar billede nielsbrinch Nybegynder
21. januar 2002 - 15:43 #14
Output for p, pin, cin og in ... hvad ser jeg på?

java.lang.Win32Process@20c10f java.io.FileInputStream@62eec8 java.io.InputStreamReader@2a9835 java.io.BufferedReader@6ec612

Jeg prøvede med vilje at lave en fejl i stien, men så sagde den bare slet ingenting.

\"Ofte er det rart at vide hvad en ekstern process
returner hvis noget går galt\" <-- Da noget gik galt, returnede den ingenting

Jeg gør nok ikke det du havde forestillet dig med de 4 linjer.
Avatar billede carstenknudsen Nybegynder
21. januar 2002 - 15:47 #15
Du skal kun kigge på den sidste, dvs den BufferedReader
der findes i sidste linie. Der returneres ikke noget objekt
men fejlbeskeder ryger til en stream.
String text;
while ( ( text = in.readLine() ) != null ) {
// gør noget med text f.eks.
System.out.println(text);
}
Avatar billede nielsbrinch Nybegynder
21. januar 2002 - 15:51 #16
Jeg får ikke noget output, men det lyder ellers overordentligt interessant at man kan fejlfinde på den måde.

Jeg har prøvet at lave en fejl ved at henvise til en sti der ikke findes, men det gør ingen forskel. Text indeholder ikke noget (dvs. in.readLine() ikke indeholder noget)
Avatar billede carstenknudsen Nybegynder
21. januar 2002 - 16:00 #17
Hmm, jeg har lige kørt det her eksempel og det virker både
når filen tt eksisterer (hvor intet returneres) og hvis den ikke
eksisterer hvor jeg får fejlen ud.
import java.io.*;
public class j {
public static void main(String[] args) throws IOException {
Process p = Runtime.getRuntime().exec(\"rm tt\");
InputStream pin = p.getErrorStream();
InputStreamReader cin = new InputStreamReader( pin );
BufferedReader in = new BufferedReader( cin );
String text;
                                                                                                  while ( ( text = in.readLine() ) != null ) {
                                                                                                  // gør noget med text f.eks.
                                                                                                    System.out.println(text);
}
}
}
Avatar billede nielsbrinch Nybegynder
21. januar 2002 - 16:27 #18
Yeps, det virker, jeg brugte try-catch ligesom i disky\'s eksempel, ikke throws...
Avatar billede carstenknudsen Nybegynder
21. januar 2002 - 18:50 #19
Når du afprøver et simpelt eksempel som jeg gjorde i min main metode er det bedre at vide hvis
der bliver kastet en exception end at fange den og
ignorere den.
Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 13:49 #20
Jeg har ved nærmere undersøgelser fundet ud af at programmerne ikke virker som de skal når de bliver kørt på denne måde - programmerne kører, men virker ikke rigtigt, angiveligt fordi de arbejder med programmet i den forkerte sti.

Hvordan sørger man for at programmet kører fra en bestemt sti, og derved også kan finde alle de dll-filer osv. som befinder sig sammen med programmet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Kickstart din IT-karriere som IT-supporterelev på Flyvestation Aalborg

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Teknisk systemansvarlig / ingeniør inden for taktisk datalink

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Afdelingschef til GDPR & Tech Regulation

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Teamleder til AL Sydbanks GDPR & Tech Regulation i Aabenraa