Frage zu IOException
lima-city → Forum → Programmiersprachen → Java
ausgabe
befehl
button
catch
command
datei
editor
effekt
eingabe
eingabeaufforderung
fehler
fort
import
main
methode
null
prozess
quelltext
status
tasten
-
Hallo, ich bin gerade dabei einen Editor in Java zu erstellen, der auf Klick auf den Button "Compilieren" (siehe Quelltext) eine Datei kompiliert. Das geht auch wunderbar, jedoch wenn ich eine nicht vorhandene Datei kompilieren will, gibt die IOException keine Fehlermeldung aus, obwohl ich eine erwartet h?tte, wie es auch in der Konsole auftreten w?rde.
Hier noch der Quelltext
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.awt.Dimension;
import javax.swing.JScrollPane;
class Editor extends JFrame implements ActionListener
{
private JPanel button_oben;
private JButton compile;
private JButton reset;
private JPanel panel_text;
private JScrollPane scrollPane;
private JTextArea text;
public Editor()
{
super("Java-Editor");
Container cp = getContentPane();
setLocation(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button_oben = new JPanel(new GridLayout(1,2));
panel_text = new JPanel(new GridLayout(1,1));
compile = new JButton("Compilieren");
reset = new JButton("Reset");
scrollPane = new JScrollPane(text = new JTextArea(10,40));
cp.add(scrollPane);
cp.add(compile);
cp.add(reset);
button_oben.add(compile);
button_oben.add(reset);
panel_text.add(scrollPane);
cp.add(button_oben,BorderLayout.NORTH);
cp.add(panel_text,BorderLayout.CENTER);
compile.addActionListener(this);
reset.addActionListener(this);
pack();
setVisible(true);
}
public void CMD(String c)
{
try
{
Process p = Runtime.getRuntime().exec(c);
}
catch(IOException ioe){text.setText("Fehler ");System.out.println(ioe);}
}
public void actionPerformed(ActionEvent ev)
{
Object taste = ev.getSource();
if(taste==reset)
text.setText("");
if(taste==compile)
{
String zucomp = text.getText();
text.setText("compile gedrueckt");
String command = "javac xxx.java";
CMD(command);
}
}
public static void main(String args[])
{
Editor edit = new Editor();
}
}
Ich hoffe mir kann einer helfen.
LG,
nwo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo,
mittlerweile habe ich dieses Problem gel?st und zwar so:
Process p = Runtime.getRuntime().exec(javac DATEI.java);
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()) );
String s;
String ausgabe_str = "";
while ( (s = in.readLine()) != null ) {
s = s+"\n";
ausgabe_str = ausgabe_str+s;
Nun habe ich aber noch ein anderes Problem. Wenn ich nun einen Code ausf?hren will, der in etwa diesem entspricht...
import java.io.*;
class IOStream
{
public static void main(String args[]) throws IOException
{
System.out.println("Bitte geben Sie etwas ein!\nEingabe: ");
BufferedReader in = new BufferedReader(
new InputStreamReader( System.in ) );
String s = in.readLine();
}
}
...kann er das Programm nicht ausf?hren, da der Prozess selbst nach einigen Minuten nicht beendet wurde. Woran liegt das, da ja alle anderen Dateien auch auszuf?hren sind?
Abschlie?end noch der Code, der das ausf?hren vornimmt:
public void CMD(String c)
{
Process p = Runtime.getRuntime().exec(c);
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()) );
String s;
String ausgabe_str = "";
while ( (s = in.readLine()) != null ) {
s = s+"\n";
ausgabe_str = ausgabe_str+s;
}
if(ausgabe_str=="")
ausgabe_str = "Es gibt keine Ausgabe!";
ausgabe.setText(ausgabe_str);
p.waitFor();
}
catch(Exception ioe){text.setText("Fehler
");System.out.println(ioe.toString());}
}
Der String c lautet: "java IOStream",
die Variable text ist eine JTextArea.
Ich hoffe ihr k?nnt dieses Problem l?sen.
LG,
nwo -
Das deine IOException nicht ausgegeben wird liegt daran das du dir nicht den Ausgabestrom von deinem Prozess geholt hast. Denn die IOException wird ja von dem PRozess aufgerufen und der hat seine eigenen Eingabe-, Ausgabe- und Fehlerstreams.
zur Ausf?hrung w?re interessant zu wissen welchen Parameter du an deine CMD Funktion ?bergibst. Vielleicht den falschen?
Evil -
Der einzige Paramter ist "java IOStream".
Au?erdem geht es mir ja nicht um die IOException, sondern wenn ich wie in dem Beispiel der IOStream.java eine Eingabe habe, dass sie auch an das Programm ?bergeben wird.
LG,
nwo -
?hm, du kannst eine Java Datei nur ausf?hren sofern sie kompiliert wurde. Und danach musst du die VM starten und die Datei sollte dann auch eine Main Methode beinhalten. Daf?r reicht die exec Function eigentlich aus. erst "javac <parameter>" und dann noch "java <parameter>" f?r das starten.
-
Hallo,
ich hab hier mal meine Editor.java hochgeladen (http://nowayout.milten.lima-city.de/java/Editor.java), du kannst sie runterladen und kompilieren.
Wenn du nun per ?ffnen die Datei IOStream.java (http://nowayout.milten.lima-city.de/java/IOStream.java) reinl?dst, anschlie?end kompilierst und nun auf Ausf?hren dr?ckst bleibt, bei mir zumindest, die Taste gedr?ckt und es passiert nichts bis ich die Eingabeaufforderung schlie?e.
Wie du dem Quellcode der letzteren Datei entnehmen kannst verlangt er eine Eingabe, aber genau darin sehe ich den Grund f?r den H?nger, denn wenn ich eine andere Datei ausf?hre (nat?rlich vorher kompiliert) kommt es zu keinen Komplikationen.
Ich hoffe du wei?t Rat,
LG,
nwo -
zuerst mal was lustiges. wenn ich kompiliere bekomme ich eine MessageBox mit dem Titel "Fehler!" mit einem roten Kreuz links und dem Text "Es ist kein Fehler aufgetreten"
ist das richtig, dass man keine Datei ausw?hlen kann die nicht im gleichen Vezeichnis ist wie der Editor?
Also bei mir kann er dann nichts kompilieren.
Beim kompilieren bemerkst du diesen Effekt des eigefrorenen Buttons auch schon. nur das kopilieren geht nicht so lang und beendet sich selbst.
Wenn du nun das Programm ausf?hrst wir es wie eine Methode von deinem Editor gestartet und der Editor wartet nun auf ein "erfolgreich durchgef?hrt / beendet" Befehl um ich wieder sich selbst zu zuwenden. Wenn du nun die Eingabeaufforderung schliesst erh?lt er diesen Befehl und f?hrt fort.
Leider kenn ich mich mit Programme aus Java starten nicht aus.
Was vielleicht noch m?glich w?re einen Thread zu schreiben, der dann ab und an den Status abfragt. Mir scheint diese M?glichkeit jedoch nicht sehr sauber. -
zuerst mal was lustiges. wenn ich kompiliere bekomme ich eine MessageBox mit dem Titel "Fehler!" mit einem roten Kreuz links und dem Text "Es ist kein Fehler aufgetreten"
Das hab ich auch schon bemerkt, aber das sind nur Kleinigkeiten, die eigentlich nicht zur Sache beitragen^^.
ist das richtig, dass man keine Datei ausw?hlen kann die nicht im gleichen Vezeichnis ist wie der Editor?
Also bei mir kann er dann nichts kompilieren.
Das stimmt ebenfalls, aber mir geht es auch immo erst einmal darum, dass alles so funktioniert wie es sollte.
Beim kompilieren bemerkst du diesen Effekt des eigefrorenen Buttons auch schon. nur das kopilieren geht nicht so lang und beendet sich selbst.
Wenn du nun das Programm ausf?hrst wir es wie eine Methode von deinem Editor gestartet und der Editor wartet nun auf ein "erfolgreich durchgef?hrt / beendet" Befehl um ich wieder sich selbst zu zuwenden. Wenn du nun die Eingabeaufforderung schliesst erh?lt er diesen Befehl und f?hrt fort.
Leider kenn ich mich mit Programme aus Java starten nicht aus.
Was vielleicht noch m?glich w?re einen Thread zu schreiben, der dann ab und an den Status abfragt. Mir scheint diese M?glichkeit jedoch nicht sehr sauber.
Nach deiner Theorie ist mir jetzt schon klar, wieso er sich aufzuh?ngen scheint.
Aber was kann man denn dagegen machen, denn in der normalen Eingabeaufforderung klappt ja auch alles wunderbar mit dem Script?
LG,
nwo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage