PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java - Externes Programm ausführen



Giuly
22-05-2003, 16:42
hi,
ich möchte etwas aus meinem java-programm compilierenm darum suche sowas wie system() in C++, wenns aber sowas wie javac() oder compiler() gibt isdas auch ok :)

anda_skoa
22-05-2003, 17:51
java.lang.Runtime

Ciao,
_

peschmae
22-05-2003, 18:31
das forum hat übrigens auch eine Suchfunktion...

MfG Peschmä

maceop
22-05-2003, 19:06
siehe z.B.

http://www.mrunix.de/forums/showthread.php?s=&threadid=31301

mfg
maceop

peschmae
23-05-2003, 11:03
unglaublich, so nett bin ich niiiiiie :D

MfG Peschmä

Giuly
23-05-2003, 11:16
Process javac = Runtime.getRuntime().exec("javac irgendwas.java");

würde das so gehen?

peschmae
23-05-2003, 13:08
eksakt

unter Win gibts manchmal ein bissserl probleme

den Stout/stderr wie im gelinkten thread angegeben auslesen...

MfG Peschmä

Giuly
23-05-2003, 13:47
dumme n00b frage, aber: Windows hat stdout/stdin/stderr?

peschmae
23-05-2003, 16:19
ja,

(schliesslich war ja dos nichts anderes als eine schlecht abgekupferte Unix-Shell)

MfG Peschmä

Giuly
23-05-2003, 18:00
muss ich die auslesen oder gehts auch ohne?

anda_skoa
23-05-2003, 18:03
Musst du nicht.

Ciao,
_

peschmae
23-05-2003, 18:05
probiers doch mal aus :o

Nein, musst du nicht, möchtest du aber vielleicht, um herauszufinden, ob das compilen erfolgreich war bzw wie die Fehlermeldung heisst...

einen Erfolg/Misserfolg findest du übrigens über "Process.exitValue()" heraus (0 heisst kein problem)

MfG Peschmä

Giuly
23-05-2003, 22:49
also wenn jetzt
Process javac = Runtime.getRuntime().exec("javac irgendwas.java");
erfolgreich ist, dann javac.exitValue().equals("0") oder wird das nicht als string ausgegeben?

peschmae
24-05-2003, 06:47
natürlich int, was denn sonst?

Wenn du schon Java programmieren willst, dann besorg dir doch bitte die Apidoc von sun :D
http://java.sun.com/j2se/1.4.1/docs/api/java/lang/Process.html

MfG Peschmä

Giuly
24-05-2003, 14:36
ich hab nochmal eine frage, hat aber nichts mit dem ausführen zutun:



/* ... */
import java.io.*;
import java.util.*;

public class yaceinstaller
{
BufferedReader br;
String p;
String oSys;
Hashtable fileHash;

public static void main(String args[])
throws IOException
{
/* ... */
System.out.println("Gib den Pfad zu Java an (z.B. /usr/java/j2sdk1.4.1)");
String javadir = br.readLine();
makeFileHash();
System.out.println(fileHash.get("1").toString());
}

public static void makeFileHash()
{
Hashtable fileHash = new Hashtable();

fileHash.put("1","1.java");
fileHash.put("2","2.java");
fileHash.put("3","3.java");
}

}


von javac bekomm ich das:


yaceinstaller.java:62: non-static variable winFileHash cannot be referenced from a static context
System.out.println(fileHash.get("1").toString());
^
1 error


ich versteh den fehler nicht so richtig, kann mir da mal jemand helfen?

anda_skoa
24-05-2003, 15:17
Deine beiden Methoden sind static, die Variablen der Klasse nicht.

Ciao,
_

peschmae
24-05-2003, 16:06
also etwa so:


/* ... */
import java.io.*;
import java.util.*;

public class yaceinstaller
{
private BufferedReader br;
private String p;
private String oSys;
private Hashtable fileHash;

yaceinstaller() {
try {
/* ... */
System.out.println("Gib den Pfad zu Java an (z.B. /usr/java/j2sdk1.4.1)");
String javadir = br.readLine();
makeFileHash();
System.out.println(fileHash.get("1").toString());
}
catch(IOException e) { System.out.println(e);}
}

private void makeFileHash()
{
Hashtable fileHash = new Hashtable();

fileHash.put("1","1.java");
fileHash.put("2","2.java");
fileHash.put("3","3.java");
}

public static void main(String args[])
{
new yaceinstaller();
}
}


MfG Peschmä

P.S. was hast du denn für ein komisches Java-Lehrbuch :confused:
du kannst nicht in der javadoch nachschauen :p, weisst nicht was static heisst, etc
dafür weisst du schon, dass man Strings nur mit .equals und nicht mit == vergleichen kann...
da komme ich nicht mit :D

anda_skoa
24-05-2003, 16:11
Original geschrieben von peschmae
also etwa so:


Bischen mehr Mühe kannst du dir schon geben.

br ist nicht initialisiert und makeFileHash arbeitet mit einer lokalen Variable statt mit der der Instanz.

Ciao,
_

peschmae
24-05-2003, 17:56
Original geschrieben von anda_skoa

br ist nicht initialisiert und makeFileHash arbeitet mit einer lokalen Variable statt mit der der Instanz.


aus dem Original unbesehen übernommen :(

allerdings fällt br imho unter das /* ... */ d.h. wird vermutlich dort initialisiert

fileHash ist mir allerdings tatsächlich durch die Lappen gegangen :D

MfG Peschmä

Giuly
24-05-2003, 18:16
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

:)



makeFileHash arbeitet mit einer lokalen Variable statt mit der der Instanz.
-
fileHash ist mir allerdings tatsächlich durch die Lappen gegangen


soll ich da was änderd?

anda_skoa
24-05-2003, 18:32
Original geschrieben von Giuly
soll ich da was änderd?

Kommt drauf an, ob du den Hashtable in der Klasse füllen willst, oder nur den in der Funktion.

Wenn ersteres, ja, wenn letzeres, nein :)

Ciao,
_

anda_skoa
24-05-2003, 18:32
Original geschrieben von peschmae
allerdings fällt br imho unter das /* ... */ d.h. wird vermutlich dort initialisiert


Ah, das hab ich übersehen :D

Ciao,
_

peschmae
25-05-2003, 08:06
gleich zwei Fehler aufs Mal wäre schon ein bisschen viel gewesen :p

MfG Peschmä