Terminal Programmieren

Damarus

Mitglied
Hi,

ich hab mir als Langzeitaufgabe heute vorgenommen ein kleines Terminalprogramm zu programmieren. Eine funktionierende GUI in der ich ein Kommando eingeben kann, welches bei druck auf Enter ausgelesen wird, habe ich schon.
Nur scheitere ich nun an einem ziemlichen Kernpunkt. Und zwar weiß ich nicht wie ich nun mit Hilfe der Eingabe ein Kommando ausführen lassen kann. Ich könnte das ganze zwar so machen, dass ich alle vorhandenen Kommandos manuell in ein Array eingebe, überprüfe, mit welchem Fach die Eingabe übereinstimmt und dann über ein Switch-Case das entsprechende Kommando ausführe, aber das wäre ja ziemlich unflexibel und bei wachsender Anzahl an Kommandos würde das Programm immer langsamer werden.
Ich habe mir mal die Sourcecodes von diversen Open Source Java Terminals angesehen und bemerkt, dass dort die Kommandos in Hashtables ([c]java.util.Hashtable[/c]) gespeichert werden. Nur habe ich keine Ahnung, was das nun ist und wie man damit arbeitet (Aus der Dokumentation werde ich auch nicht schlau).
Am Ende hätte ich am liebsten pro Kommando eine Klasse (Die sich möglicherweise von einer Klasse "Command" o.Ä. ableiten). Also wie realisiere ich das?

Hier mal mein Code:
Java:
package com.damarus;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class JShell extends JPanel implements KeyListener {

	private static final long serialVersionUID = 1L;

	JTextField field = new JTextField();
	JEditorPane editor = new JEditorPane();

	public JShell() {
		super(new BorderLayout());

		// Content
		editor.setEditable(false);
		editor.setBackground(Color.LIGHT_GRAY);
		this.add(editor, BorderLayout.CENTER);

		field.addKeyListener(this);
		this.add(field, BorderLayout.PAGE_END);
	}

	@Override
	public void keyTyped(KeyEvent e) {

	}

	@Override
	public void keyPressed(KeyEvent e) {

	}

	@Override
	public void keyReleased(KeyEvent e) {
		// Wenn Enter gedrückt wird, wird die Eingabe in
		// editor übernommen und field geleert
		if (e.getKeyCode() == KeyEvent.VK_ENTER) {
			editor.setText(editor.getText() + field.getText() + "\n");
			field.setText("");
		}

	}

	public static void main(String[] args) {
		// GUI starten
		setUp();
	}

	public static void setUp() {
		// Frame
		JFrame frame = new JFrame("JShell");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(600, 300);

		JPanel panel = new JShell();
		frame.setContentPane(panel);

		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}
}
 

kirax

Bekanntes Mitglied
Java API Doc - Hashtable hat gesagt.:
This class implements a hashtable, which maps keys to values.
Erster Satz in der Dok.

Das bedeutet, dass du in die Tabelle Schlüssel-/Wertepaare eintragen kannst:
Java:
Hashtable<Integer, String> table = new Hashtable<Integer, String>();
table.put(0, "zero");
table.put(1, "one");
// ...
String zero = table.get(0);
String one = table.get(1);

Hashtable heißt das Konstrukt deshalb, weil eine Hashfunktion verwendet wird, um die Objekte beim Einfügen an einen bestimmten Ort zu setzen (der sich aus der Hashfunktion ergibt) und beim Suchen wieder die Hashfunktion auf den Schlüssel angewendet wird, um den Wert (das "Ziel"objekt) schnell wieder zu finden. Eine gute Hashfunktion hat eine gute Streuung (=wenige Konflikte = wenige gleiche Objekte, die mit unterschiedlichen Schlüsseln das gleiche Ergebnis in der Hashfunktion haben). Aber keine Angst, um die Hashfunktion brauchst du dir bei gängigen Schlüsseltypen (String, Integer, ...) keine Gedanken zu machen. Die ist schon annähernd gut implementiert ;)

Stell dir ne Bibliothek vor, wo es ein Abholregal gibt, in dem vorbestellte Bücher einsortiert werden. Die Sortierung innerhalb des Regals läuft nach den beiden Endziffern der Ausweisnummer (Hashfunktion). Die Wahrscheinlichkeit, dass jemand mit den gleichen Endziffern im Ausweis auch ein Buch ausgeliehen hat (Konflikt), ist gering genug, dass du mit Hilfe des Buchtitels (Schlüssel) extrem schnell zu deinem Buch kommst.

Im Gegensatz zur "Standardtabelle" muss bei der Hashtable nicht jeder Eintrag mit dem gesuchten Schlüssel verglichen werden, was linearer Laufzeit entsprechen würde - bei sortierten Tabellen wäre es immerhin logarithmische Laufzeit.
Der Vorteil von Hashtables ist in der Tat die Geschwindigkeit. Für eine hinreichend gute Hashfunktion laufen die ganzen Prozesse (Einfügen, Herausnehmen, Löschen) nämlich (theoretisch) in erwarteter konstanter Laufzeit ab (egal wie groß die Tabelle ist).

Du könntest für dein Terminal eine Hashtable nehmen, die von String (=Befehl) auf Command (=auszuführendes Kommando) mappt.


EDIT: Es heißt oben natürlich [c]put[/c], nicht [c]add[/c] :oops:
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Frei vom Gewohnheitszentrum meines Hirns in die Tasten.

Java:
public abstract class Command
{
	public Command()
	{
		super();
	}
	public abstract void run(String... args);
}
public class HelloWorldCommand()
{
	public HelloWorldCommand()
	{
		super();
	}
	public void run(String... args)
	{
		System.out.println("Hello World");
	}
	public void toString()
	{
		return("HelloWorld");
	}
}
//....

private Map<String, Command> commandMap;

//...
commandMap = new HashMap<String, Command>();
//...

public void loadCommands()
{
	Command cmd = new HelloWorldCommand();
	commandMap.put(cmd.toString, cmd);
}
public void runCommand(String line)
{
	String[] split = Pattern.compile(" ").split(line, 0);
	Command cmd = commandMap.get(split[0]);
	if(cmd != null)
		cmd.run(split); //Erstes Parameter entfernen?
	else
		System.out.println("Befehl nicht gefunden"); //Zuerst auf lokale Anwendung prüfen?
}

To slow, again. :(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
F Terminal Windows per Befehl schließen? Java Basics - Anfänger-Themen 9
G Java-Programm Terminal Java Basics - Anfänger-Themen 2
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
M Eingabe im Terminal nicht möglich Java Basics - Anfänger-Themen 20
B Drucken mit einem Terminal / Bon Printer Java Basics - Anfänger-Themen 4
J Zusätzliches Menü in einem Terminal erstellen Java Basics - Anfänger-Themen 0
Z Erste Schritte Versuche ein Labyrinth in einem Terminal zu erstellen, aber kann die properties Datei nicht einlesen Java Basics - Anfänger-Themen 3
W Java in "Terminal" schreiben Java Basics - Anfänger-Themen 9
N Eclipse Projekt im Terminal (Mac) öffnen.... Java Basics - Anfänger-Themen 4
B lanterna einzelne Zeichen aus dem Terminal löschen Java Basics - Anfänger-Themen 0
K Parameterübergabe im Terminal(Linux) Java Basics - Anfänger-Themen 8
S Terminal bei leerer Eingabe auslesen Java Basics - Anfänger-Themen 5
M In Netbeans kein Problem, im Terminal schon Java Basics - Anfänger-Themen 3
P javaw.exe zeigt trotzdem Terminal/CmdPrompt Java Basics - Anfänger-Themen 2
N Error beim Ausführen im Terminal Java Basics - Anfänger-Themen 5
NR_EIGHT Erste Schritte .class im Terminal (Mac OS X) nicht ausführbar! Java Basics - Anfänger-Themen 7
N NetBeans Projekt im Terminal starten Java Basics - Anfänger-Themen 2
K Terminal Befehl mit Java unter Mac ausführen Java Basics - Anfänger-Themen 18
K Terminal - Mit oder Ohne? Java Basics - Anfänger-Themen 15
O Java- File in Shell/Terminal/etc. öffnen Java Basics - Anfänger-Themen 8
S Terminal Problem Java Basics - Anfänger-Themen 5
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
B OOP was heißt objektorientiertes Programmieren (fragt ein absoluter Anfänger) Java Basics - Anfänger-Themen 17
laxla123 Rechteck programmieren Java Basics - Anfänger-Themen 4
A Erste Schritte Dynamische Stempel im PDF Exchange programmieren Java Basics - Anfänger-Themen 0
D Programmieren nach UML Java Basics - Anfänger-Themen 2
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
B Überweisung programmieren Java Basics - Anfänger-Themen 7
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
D Ampel Programmieren die jede 10 sekunden ihre farbe wechselt Java Basics - Anfänger-Themen 6
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
thor_norsk Fernseher programmieren mit Java Java Basics - Anfänger-Themen 4
M Jenga Regeln Java Programmieren Java Basics - Anfänger-Themen 1
M Ressourcensparend programmieren Java Basics - Anfänger-Themen 3
brypa Wie Programmieren lernen? Java Basics - Anfänger-Themen 15
G Spielerwechsel programmieren Java Basics - Anfänger-Themen 1
J Solitär (Brettspiel) programmieren Java Basics - Anfänger-Themen 3
H Objektorientiertes Programmieren Java Basics - Anfänger-Themen 4
K 12- Stunden Konverter Programmieren Java Basics - Anfänger-Themen 1
WAB9703-04 Programm zum automatischen Ausfüllen von Formularen programmieren Java Basics - Anfänger-Themen 3
L Zahlenspiel programmieren Java Basics - Anfänger-Themen 1
TimoN11 Automat programmieren Java Basics - Anfänger-Themen 4
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
ehmo würfelspiel programmieren anfänger Java Basics - Anfänger-Themen 1
N Ufospiel programmieren Java Basics - Anfänger-Themen 13
KogoroMori21 Vorbereitung auf die Programmieren Klausur vom ersten Semester Java Basics - Anfänger-Themen 4
Drinkerbell Erste Schritte Zu blöd zum Programmieren? Java Basics - Anfänger-Themen 9
G Stack programmieren Java Basics - Anfänger-Themen 6
I Brauche Hilfe bei Objektorientiertem programmieren Java Basics - Anfänger-Themen 23
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
G Bruchrechner programmieren Java Basics - Anfänger-Themen 6
G Ufo Spiel programmieren Java Basics - Anfänger-Themen 13
D Schachbrett (8x8) programmieren Java Basics - Anfänger-Themen 3
J Spiel programmieren Java Basics - Anfänger-Themen 16
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
S Kreisberechnung3 Buch: Programmieren lernen mit Java von Hans-Peter Habelitz Java Basics - Anfänger-Themen 39
M Quiz in Java programmieren mit Array Java Basics - Anfänger-Themen 8
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
K Java programmieren Java Basics - Anfänger-Themen 6
V_Fynn03 Kontrolle des Quelltextes (Bank programmieren)(GUI) Java Basics - Anfänger-Themen 6
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
V_Fynn03 Bruchrechner programmieren (2 Klassen) Java Basics - Anfänger-Themen 9
N Ticketautomat programmieren Java Basics - Anfänger-Themen 63
M Rechner programmieren Java Basics - Anfänger-Themen 3
V_Fynn03 Java Bruchrechner programmieren Java Basics - Anfänger-Themen 13
J Java Suchfunktion Programmieren Java Basics - Anfänger-Themen 1
L Erste Schritte Bin ich "zu dumm" oder nicht geeignet zum Programmieren? Java Basics - Anfänger-Themen 3
U Ist jemad gut in programmieren (JAVA) und kann mir helfen? Java Basics - Anfänger-Themen 1
H Uhr programmieren Java Basics - Anfänger-Themen 10
T Schalter programmieren Java Basics - Anfänger-Themen 17
S Ampel Programmieren Java Basics - Anfänger-Themen 5
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
D Richtig für Programmieren an der UNI lernen Java Basics - Anfänger-Themen 8
B Folgende Abfrage dynamisch programmieren? Java Basics - Anfänger-Themen 8
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
S Spiel programmieren mit Java Java Basics - Anfänger-Themen 11
A Kalender programmieren, ich finde meinen Fehler nicht. Java Basics - Anfänger-Themen 9
S Erste Schritte Hilfe beim lernen von Programmieren Java Basics - Anfänger-Themen 2
V Zeichenkette programmieren Java Basics - Anfänger-Themen 20
O Fenster programmieren Java Basics - Anfänger-Themen 2
R Uebersichtlicher bzw. besser Programmieren Java Basics - Anfänger-Themen 13
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
B Spielfiguren für ein Beute-Jägerspiel programmieren Java Basics - Anfänger-Themen 12
A Programmieren lernen Java Basics - Anfänger-Themen 28
F ArrayListe manuell programmieren? Java Basics - Anfänger-Themen 24
X Erste Schritte Einstieg ins Programmieren Java Java Basics - Anfänger-Themen 2
O Erste Schritte ln(1+x) Reihe Programmieren Java Basics - Anfänger-Themen 6
Ellachen55 Weihnachtsbaum in Eclipse programmieren Java Basics - Anfänger-Themen 6
L Klassen Geldrückgabe - Aufgabe Programmieren Java Basics - Anfänger-Themen 23
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
V Variablen Vorkommen programmieren Java Basics - Anfänger-Themen 18
S Dreieckssignal programmieren Java Basics - Anfänger-Themen 5
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
M Spiel programmieren Java Basics - Anfänger-Themen 16
A Fenster programmieren Java Basics - Anfänger-Themen 1
V OOP Kassensystem objektorientiert programmieren Java Basics - Anfänger-Themen 15

Ähnliche Java Themen

Neue Themen


Oben