PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : gui für linux programmieren



pille
20-02-2003, 14:31
hallo zusammen,
ich habe mir das ergeizige ziel gesetzt ein gui für eine linux-konsolen-anwendung zu schreiben in java (wget falls das jemand kennt..)
wie stelle ich das an?! link wären gut, damit ich mich in das thema einlesen kann..!

greez pille

ReSeT
20-02-2003, 14:42
Hi!

Das was Du machen willst, ist ja im Endeffekt nichts anderes, als eine Zeichenkette zu konstruieren, die dann der Shell übergeben wird. Auf der anderen Siete muß das, was das Programm über die Standardausgabe ausgibt, wieder von Deinem Java-Programm eingelesen und dargestellt werden.

Ich würde das vielleicht so lösen, daß ich alle Optionen jeweils als konstante Zeichenkette auffasse, die je nach Einstellung, die in deiner GUI vorgenommen werden, als Zeichenkette aneinandergehängt werden und dann mit system(Zeichenkette) an das System übergeben werden.

Bin jetzt leider nicht genug JAVA-Spezialist, um Dir einen Ansatz zu zeigen, aber ich denke das meisste wirst Du mit vorgefertigten Java Klassen für Stringoperationen lösen können.

GreetZ

ReSeT

pille
20-02-2003, 14:50
ja klar, das problem ist, wie ich die kommandos dem system übergebe und die ausgaben abfange!!

Roman
20-02-2003, 15:06
Ich habe lange nicht mehr mit Java gearbeitet, konkrete Anleitungen kann ich dir also nicht geben.

Schau dir mal an was Java zum Thema Prozesse so kann. Willst du wget starten, wirst du einen Prozess starten. Dieser (Java-)Prozess müsste dir Streams zur verfügen stellen: Zum lesen und zum schreiben. Willst du nun sehen wie die Ausgaben von wget sind, musst du den Ausgabestream des Prozess auslesen.

Informiere dich mal ausgibig(!!!!), wie man in Java neue Prozesse starten kann. Was du dann genau machen musst kommt dann von alleine.

pille
20-02-2003, 15:18
ok, danke..!
dann informiere ich mich mal ein bisschen darüber!

gruss chrigu

anda_skoa
20-02-2003, 15:59
Dazu müsste es im Forum schon was geben.

Die Klasse die du suchst sit java.lang.Runtime

MIt exec kannst du Prozesse starten.
Der gestartet Prozess wird durch java.lang.Process dargestellt.
Diese Klasse gibt dir die IO Streams, etc.

Ciao,
_

maceop
20-02-2003, 16:53
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import java.util.*;
import java.io.*;

public class execute extends JFrame
{
JTextField eingabe;

class WindowListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
}


class buttonlauscher implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(eingabe.getText() != null)
call(eingabe.getText());
}
}

void call(String cmdline)
{
try
{
String line;
Process p = Runtime.getRuntime().exec(cmdline);
BufferedReader input = new BufferedReader (new InputStreamReader(p.getInputStream()));

while ((line = input.readLine()) != null)
{
//........
}

input.close();
} catch (IOException ioe)
{
System.out.println("io");
}
}

execute(String titel)
{
super(titel);
eingabe = new JTextField();
JPanel pane = new JPanel();

JButton button = new JButton("Execute");

pane.setLayout(new GridLayout(1,2));
pane.add(eingabe);
pane.add(button);

getContentPane().add(pane);

addWindowListener(new WindowListener());
button.addActionListener(new buttonlauscher());
}

public static void main(String[] args)
{
execute f = new execute("");
f.pack();
f.setSize(250,50);
f.show();
}
}


vielleicht hilft dir das

pille
21-02-2003, 09:47
danke! werde mal versuchen das zum laufen zu bringen!!

neonknight
06-03-2003, 22:53
ich habe versucht, den rückgabewert während der ausführung in eine textarea zu schreiben. allerdings scheint das nicht so ganz zu funktionieren.

JTextArea outputarea = ...
String line;
Process p = Runtime.getRuntime().exec(cmdline);
BufferedReader input = new BufferedReader (new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null){
System.out.println(line);
String text = outputarea.getText();
text = text + "\n" + line;
outputarea.setText(text);
}
input.close();

nun bleibt sowohl der system-output wie auch die jtextarea leer. das aufgerufene programm wird aber ausgeführt. wo liegt mein fehler?

peschmae
07-03-2003, 07:34
wo das problem genau liegt kann ich dir nicht sagen, aber ich würde statt


String text = outputarea.getText();
text = text + "\n" + line;
outputarea.setText(text);

eher sowas machen:


outputarea.append(line+"\n");


ou jetzt hab ich ne idee:
kommt der Output auf stderr und du beobachtest stdout?????

MfG Peschmä

neonknight
08-03-2003, 10:47
Original geschrieben von peschmae
kommt der Output auf stderr und du beobachtest stdout?????

wie kann ich das herausfinden, was ich beobachte?



soweit ich herausgefunden habe, wird die while-schleife tatsächlich gar nie ausgeführt (getestet mit einem System.out.println - aber die konsole blieb leer).

ein System.out.println(input.readLine()); vor der while-schleife (zum testen, ob der input ein "null" zurückwirft) führt zu einer dicken fehlermeldung ClassFormatError (invalid pc in line number table)

peschmae
08-03-2003, 15:48
ich würds mal mit

getErrorStream()

anstelle von

getInputStream()

versuchen - wenn du nämlich versuchst stdout zu lesen, der Prozess aber alles auf stderr schreibt, siehst du nix

MfG Peschmä

neonknight
09-03-2003, 09:02
Original geschrieben von peschmae
getErrorStream()

bingo! damit geht es. vielen dank!

neonknight
24-03-2003, 19:00
ich habe ein problem mit der übergabe von optionen mit parametern in der form
--option=parameter
wenn der parameter ein leerzeichen enthält. in der bash kann ich das leerzeichen ja mit dem backslash \ maskieren. doch wenn ich die befehlszeile aus java übergebe, so wird der backslash ignoriert und das programm falsch ausgeführt.

dass ich innerhalb von java den backslash auch noch maskieren muss, weil er auch dort als escape-zeichen dient, habe ich bedacht ;)
also die übergabe ans system ist theoretisch korrekt, wenn ich die befehlszeile von hand abtippe, wird es richtig ausgeführt. nur mit der automatisierten version klappt das nicht :(

wie also kann ich diese leerzeichen umgehen. vermeiden kann ich sie leider nicht.

anda_skoa
24-03-2003, 19:29
Welche exec Methode verwendest du?

Die mit nur einem String?

Wenn ja, benutze die mit dem String Array.
In das erste Feld den Befehl, dann pro Parameter einen weiteren String.
Java escaped dann automatisch, glaub ich

Ciao,
_