Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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?
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 );
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); }
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)
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); } } }
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.
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.
Synes godt om
Ny brugerNybegynder
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.