Hallo Community.
Zurzeit habe ich ein kleines Projekt und hänge an einer Stelle. Da habe ich mir gedacht, ich meld mich hier mal an und frag nach. Ich habe schon viel Zeit in Suchen investiert und nur teilweise Ergebnisse gefunden, falls jedoch noch ähnliche Beiträge rum sind, wäre es sehr nett diese hier zu verlinken.
Und ich weiß nicht ob ich dieses Thema in das richtige Unterforum gepostet habe. Ansonsten bitte verschieben.
Mein Problem:
Ich möchte gerne eine GUI machen welche ähnlich der CMD-Konsole aussschaut. Mit dieser GUI möchte ich dann andere JAR-Dateien laden.
Der Code für das umleiten der Input/Output-Streams sowie der GUI ist von hier.
Der Code:
Funktioniert ganz gut. Da die auszuführende JAR jedoch Dateien braucht die im selben Ordner liegen muss ich zuerst mit "cd" den Pfad ändern. Geht auch. Die JAR lässt sich mit "java -jar test.jar" auch starten jedoch kann ich keine Eingaben in der JAR machen. Bei der in diesem Fall auszuführenden JAR handelt es sich um die CraftBukkit.jar welche für Minecraft-Server gemacht wurde. Diese empfängt meine Befehle nicht. Jedoch ein einfacher Taschenrechner, gemacht mit Scannern, funktioniert.
Kann mir hier jemand helfen?
Gruß PNGamingPower
Zurzeit habe ich ein kleines Projekt und hänge an einer Stelle. Da habe ich mir gedacht, ich meld mich hier mal an und frag nach. Ich habe schon viel Zeit in Suchen investiert und nur teilweise Ergebnisse gefunden, falls jedoch noch ähnliche Beiträge rum sind, wäre es sehr nett diese hier zu verlinken.
Und ich weiß nicht ob ich dieses Thema in das richtige Unterforum gepostet habe. Ansonsten bitte verschieben.
Mein Problem:
Ich möchte gerne eine GUI machen welche ähnlich der CMD-Konsole aussschaut. Mit dieser GUI möchte ich dann andere JAR-Dateien laden.
Der Code für das umleiten der Input/Output-Streams sowie der GUI ist von hier.
Der Code:
Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.concurrent.Executors;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class JCLGUI extends JFrame {
private static final long serialVersionUID = -2161140285398426243L;
JTextArea txtConsole;
JTextField txtCommand;
public JCLGUI() {
super("JavaCommandLineWrapperExample");
setDefaultCloseOperation(EXIT_ON_CLOSE);
txtConsole = new JTextArea(20, 80);
txtConsole.setBackground(Color.BLACK);
txtConsole.setForeground(Color.WHITE);
txtConsole.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
txtConsole.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
txtCommand.requestFocus();
txtCommand.dispatchEvent(e);
}
});
txtCommand = new JTextField(80);
txtCommand.setBackground(Color.BLACK);
txtCommand.setForeground(Color.WHITE);
txtCommand.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
txtConsole.setEditable(false);
JScrollPane scrollPane = new JScrollPane(txtConsole);
add(scrollPane);
add(txtCommand, BorderLayout.SOUTH);
setSize(900, 400);
setVisible(true);
txtCommand.requestFocus();
startShell();
}
void startShell() {
ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe")
.redirectErrorStream(true);
try {
final Process process = processBuilder.start();
final PrintWriter processInput = new PrintWriter(process
.getOutputStream());
captureProcessOutput(process);
txtCommand.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
processInput.println(txtCommand.getText());
processInput.flush();
txtCommand.setText("");
}
});
int exitCode = process.waitFor();
System.exit(exitCode);
} catch (Exception e) {
e.printStackTrace();
}
}
void captureProcessOutput(final Process process) {
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
try {
char c = (char) -1;
InputStream processOutput = process.getInputStream();
while ((c = (char) processOutput.read()) != -1) {
if ((byte) c == 12) {
/*
* der Byte-Code, der gesendet wird, wenn der
* Bildschirm gelöscht werden soll, in cmd.exe der
* Befehl "cls"
*/
txtConsole.setText("");
} else {
// String s = Character.toString(c);
// txtConsole.append(new
// String(s.getBytes("CP1225")));
txtConsole.append(String.valueOf(c));
}
txtConsole.setCaretPosition(txtConsole.getText()
.length());
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
public static void main(String[] args) throws Exception {
new JCLGUI();
}
}
Funktioniert ganz gut. Da die auszuführende JAR jedoch Dateien braucht die im selben Ordner liegen muss ich zuerst mit "cd" den Pfad ändern. Geht auch. Die JAR lässt sich mit "java -jar test.jar" auch starten jedoch kann ich keine Eingaben in der JAR machen. Bei der in diesem Fall auszuführenden JAR handelt es sich um die CraftBukkit.jar welche für Minecraft-Server gemacht wurde. Diese empfängt meine Befehle nicht. Jedoch ein einfacher Taschenrechner, gemacht mit Scannern, funktioniert.
Kann mir hier jemand helfen?
Gruß PNGamingPower
Zuletzt bearbeitet: