Archiv für Mai 2008
Kommandozeile in Java
Auch schon mal gefragt, wie man mit Java Kommandozeilenprogramme erstellen kann? Muss ja nicht immer grafisch sein…
Nun, die Lösung liegt hier im Parameter der main-Methode:
public static void main( String args[ ] )
Beim Programmstart über die Kommadozeile wird das Feld args (das übrigens auch anders heißen kann, nur „args“ oder auch „argv“ hat sich nunmal durchgesetzt als Standardbezeichnung
mit den einzelnen übergebenen Strings gefüllt. Zum Beispiel spricht
args[ 0 ]
das erste Element an. Hierzu ein kleines, Beispielprogramm:
class Cmd
{
public static void main( String[ ] args )
{
for( String s : args )
System.out.println( s );
if( args[ 0 ].equals( "Test" ) )
System.out.println( "Test" );
else
System.out.println( "NoTest" );
}
}
Zuerst werden alle Parameter ausgegeben, anschließend wird getestet, ob der erste Parameter „Test“ ist; ist er es, wird „Test“ ausgegeben, ansonsten „NoTest“:
$ java Cmd Test
$ java Cmd Test
Test
Test
$ java Cmd Noch ein Test mit mehreren Parametern
Noch
ein
Test
mit
mehreren
Parametern
NoTest
Was passiert jetzt aber, wenn man garnichts übergibt, aber trotzdem versucht, die Elemente anzusprechen? Nun, es gibt eine Exception, die nun wie üböich behandelt werden sollte:
$ java Cmd
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Cmd.main(cmd.java:8)
Also immer schön darauf Acht geben
iLyrics: iTunes-Biobliothek automatisch um Songtexte ergänzen
Das Programm iLyrics hilft allen, die ihre Musik mit iTunes von Apple (unter Windows) verwalten. Auch wenn iTunes bereits hilfreiche Features für komfortable Verwaltung von Musik unterstützt (zum Beispiel intelligente Wiedergabelisten) und vorallem von iPod-besitzern genutzt wird, fehlt meiner Meinung nach ein entscheidendes Feature. Die Songtexte (Lyrics) werden nicht mal beim Kauf im iTunes-Store mitgeliefert.
Für alle die das genauso stört, gibt es iLyrics. Sie markieren einfach ein oder mehrere Songs in Ihrer Bibliothek und starten iLyrics. Auf Knopfdruck werden die Songtexte automatisch hinzugefügt. Auf Wunsch kann man den Text davor noch ergänzen oder ändern.
iLyrics greift hierfür auf LyricWiki zurück, eine Lyric-Datenbank im Wiki(pedia)-Stil. Natürlich kann sich hier auch bedienen, wer kein iTunes und iLyrics nutzt.
.jar-Dateien mit Netbeans erstellen
Die OpenSource-IDE „Netbeans“ aus dem Hause Sun erlaubt das Entwickeln von Programmen mit dutzenden Programmiersprachen. Ein besonders praktisches Feature steht für die Sprache Java zur Verfügung.
So lässt sich das Projekt in ein .jar-Archiv verwandeln. Das ist eine besondere Form des .zip-Archivs und erlaubt das einfache Ausführen eines Programms (das JRE („JavaRuntimeEnvorinment“) vorausgesetzt). Um solch eine .jar-Datei zu erstellen wird kein Plugin benötigt. Es reicht die Version Java SE, die gerade mit Version 6.1 erschienen und auf der offiziellen Website herunterladbar ist.
In Netbeans (im Moment ist die aktuelle Version 6.1 nur in Englisch verfügbar) gehen Sie auf „Build“->“Build Main Project“ (alternativ auch auf „Clean and Build Main Project“). Im Speichertverzeichnis des Projektes wird jetzt ein Ordner namens „dist“ angelegt. Darin befindet sich die Datei [Projektname].jar!
Layoutmanager in Java – Teil 1
In diesem Eintrag sollen 2 Layoutmanager in Java besprochen werden; doch zuerst: wozu braucht man das überhaupt, einen Layoutmanager? Nun, wenn man Komponenten in einem Fenster anordnen möchte, so stellt sich doch die Frage: wie soll das Fenster hinterher aussehen? Wie sollen die Komponenten angeordnet werden? Die simpelste, aber umständlichste Variante:
frame.setLayout( null );
Hier wird garkein Layoutmanager benutzt, alle Komponenten müssen mit setBounds( ); einzeln „gesetzt“ werden.
Ein Layoutmanager kann uns hier nun viel Arbeit abnehmen: wir fügen die Komponenten hinzu, und der Layoutmanager bestimmt dann wie es am Ende aussieht; hierbei können wir unterschiedlich genau Positionen/Größen bestimmen, je nach vewendetem Layoutmanager. In Teil 1 sollen 2 Layoutmanager vorgestellt werden: das BorderLayout (Standardlayout für ein JFrame) und das FlowLayout (Standardlayout für ein JPanel).
Das BoderLayout unterteilt das das Fenster in 5 Teile: NORTH, CENTER, SOUTH, EAST, WEST. Komponenten werden so hinzugefügt:
frame.add( new JButton( "Button 1" ), BorderLayout.NORTH );
Hier wird ein Button im Norden des Frames hinzugefügt; prinzipiell lassen sich natürlich auch andere Komponenten hinzufügen – auch JPanels.
Das FlowLayout ist etwas simpler: Komponenten werden einfach nacheinander hinzugefügt, in einer Reihe von links nach rechts. Die Ausrichtung der Komponenten (z.B. links/rechtsbündig) lässt sich so bestimmen:
FlowLayout layout = new FlowLayout( FlowLayout.RIGHT);
frame.setLayout( layout );
Alle Komponenten in besagtem Frame werden nun also rechtsbündig ausgerichtet.
g++ (MinGW) installieren (und in UltraEdit einbinden)
Dieser Beitrag richtet sich an aller C++ Entwickler unter Windows, die mit IDM UltraEdit arbeiten; oder solche, die es werden wollen.
Warum MinGW und UltraEdit?
UltraEdit ist ein Texteditor für Programmierer aus dem Hause IDM (offizielle Website). Der Vorteil bei UltraEdit ist, das er zwar ein mächtiger Texteditor für nahezu alle Bedürfnisse ist, aber dem Entwickler nicht am Code pfuscht. Das heißt Sie geben die Kontrolle über Ihre Projekte nicht aus der Hand und trotzdem wird in an vielen Stellen Arbeit abgenommen. So lässt sich zum Beispiel die Codevervollständigung aktivieren oder externe Programme (wie Compiler) einbinden. Natürlich gehören auch Lesezeichen, (auch eigene) Code-Vorlagen, Umgang mit Projekten und Einzeldateien, WebSearchToolbar, Verschlüsselung, FTP-Browser, eine anpass- und abspeicherbare Arbeitsoberfläche, Codebereinigung, … zum Lieferumfang.
MinGW ist ein Compilerpaket, dass veile Sprachen wie C/C++, JAVA, … abdeckt. Im Grunde sind dort alle Werkzeuge der GNU-Compiler-Collection enthalten. Diese sind für jedes Linux-System verfügbar, weshalb das MinGW-Paket ausschließlich für Windows erhältlich ist. Neben dem Compiler Von Microsoft ist der g++ einer der am häufigsten genutzten Compiler für C/C++.
MinGW installieren
Da die Installation von UltraEdit durch den Installationsassisten in Deutsch eigentlich sehr einfach ist und ohne Probleme ablaufen sollte, gehen wir im Folgenden davon aus, das dies bereits erledigt ist. Bleibt also noch MinGW. Die offizielle Website lautet http://www.mingw.org/. Dort befindet sich auch ein Link zum Sourceforge-Archiv des MinGW-Projekts, wo die Dateien heruntergeladen werden können. Wir nehmen hier den „Automated MinGW Installer“.
Nach dem Dowload kann die .exe gestartet werden. Eine Meldung erscheint, das nach der aktuellsten version gesucht wird. Anscheinend erscheint die Meldung „Welcome to MinGW Version …“.
- Die Installation kann mit „Next >“ vorbereitet werden. Hier wählen wir „Download and install“ um die benötigten Datien aus dem Internet zu laden und MinGW anschließend zu installieren.
- MinGW kann nur isntalliert werden, wenn sie die nun sichtbare lizenz mit „I Agree“ akzeptieren.
- Bei der Frage,w elche Version wählen wir „Current“. Es gibt in der regel keinen Grund ältere Sofwtare vorzuziehen. Aber eine ß-Version kann zu Problem führen. Weiter mit „Next >“.
- Nun können Sie wählen welche Pakete installiert werden sollen. Zunächst reicht uns für die reine C++-Programmierung „MinGW Base Tools“ und „g++ Compiler“. (Natürlich können Sie bei Bedarf weitere installieren.)
- Nach „Next >“ können Sie nun ein Installatiosnverzeichnis wählen. Sie könne hier im Grunde ein beliebiges auswählen. allerdings verursachen Compiler manchmal Probleme, wenn in irgendeinem Pfad Leerzeichen sind. Es wäre also praktisch hierauf zu verzichten. Der Vorschlag („C:\MinGW“) ist also eine gute Idee.
- Anschließend kann der Name für den Ordner im Startverzeichnis gewählt werden.
- Nach dem Klick auf „Install“ werden die benötigten Datien aus dem Internet geladen und die Installation startet.
- Anschließend ein Klick auf „Next >“ und hier auf „Finish“ und Sie haben es geschafft.
g++ ohne UltraEdit benutzen
g++ ist nun einsatzbereit. Sie sollten allerdings den Pfad zu MinGW noch als Umgebungsvariable setzen. Sonst müssen Sie beim Kompilieren immer den kompletten Pfad angaben.
- Gehen Sie in den Eintrag „System“ in der Systemsteuerung. Hierfür muss die klassische Ansicht ausgewählt sein.
- Nun gehen Sie auf den Reiter „Erweitert“ und klciken auf den Button ganz unten „Umgebungsavriablen“.
- Unter „Systemvariablen“ suchen Sie den Eintrag „Path“.
- Nach einem Doppelklick können Sie in das Feld „Wert der Variablen“ den folgenden Text anhängen: „;C:\MinGW\bin“ (ohne Anführungszeichen, gegebenenfalls müssen Sie den Pfad anpassen, wenn Sie ihr Installationsverzeichnis anders gewählt haben).
- Damit die Umgebungsvariablen komplett übernommen werden, sollte der PC nun neugestartet werden.
Wenn Sie nun eine .cpp-Datei kompilieren wollen, rufen Sie die Konsole auf (zum Beispiel mit [WIndows]+[E] und dort „cmd“ (ohne Anführungszeichen) eingeben. Mit [Enter] bestätigen).
- wechseln Sie mit „cd“ in das Verzeichnis, indem sich die .cpp-Datei befindet. Zum Beispiel: cd C:\dev\cpp
- Hier geben Sie g++ -o MeinErstesProgramm MeinErsterCode.cpp ein (g++ -o [Name die die .exe haben soll] [Kompletter Name der Datei]).
- Wenn Sie mehrere Dateien kompilieren wollen, können Sie anstatt „MeinErsterCode.cpp“ auch „*.cpp“ schreiben.
g++ in UltraEdit einbinden
Wenn Sie UltraEdit benutzen, können Sie sich die ganze Arbeit unter „g++ ohne UltraEdit benutzen“ sparen. Hier gehen Sie einfach unter [Extras]->[Werkzeug-Konfiguration]. Anschließend auf „Einfügen“. Nun können Sie die folgenden Werte eingeben:
- Bezeichnung für den Menüeintrag: aktuelle Datei kompilieren
- Befehlszeile: C:\MinGW\bin\g++.exe -o „%n“ %F
- Arbeistverzeichnis: %P
- (Nun im Reiter „Optionen“) Programmtyp: Dos-Programm
- Ein Harken bei „Aktive Datei erst speichern“
- (Nun im Reiter „Ausgabe“)Befehlsausgabe: Ausgabe in Listenfeld und Ausgabe aufzeichnen
- Markierten Text ersetzen durch: Nicht ersetzen
Wenn Sie ganze Projekte kompilieren möchten, müssen Sie im Gegensatz zu oben einige Einträge ändern:
- Bezeichnung für den Menüeintrag: Projekt kompilieren
- Befehlszeile: C:\MinGW\bin\g++.exe -o „%rn“ %RP*.cpp
- Arbeistverzeichnis: %RP
- Ein Harken bei „Erst alles speichern“
Nun können Sie noch Einträge zum Ausführen der erstellen Programme einfügen. Wenn Sie die erstellte .exe einer Datei ausführen wollen, lautet die Befsehlszeile „%P%N.exe“ (beim Projekt „%RP%RN.exe“). Unter Optionen wird nichts gespeichert und das DOS-Programm ausgewählt. Bei beiden Typen wird unter dem Reiter „Ausgabe“ das Häkchen bei „Ausgabe aufzeichnen“ entfernt und afür eins bei „DOS-Fenster anzeigen“ gesetzt.
Mehr zu diesen Möglichkeiten bei UltraEdit finden Sie auch sehr gut dokumentiert in der Hilfe. Der Eintrag in der Hilfe ist gleichnamig mit dem genutzten im Extras-Menü.
Systemcalls mit C unter Linux
So… das Thema dieses Eintrags sind also „Systemcalls mit C unter Linux“… doch was sind jetzt eigentlich „Systemcalls“ oder auch kurz „Syscalls“?
Ich will mich hier kurz fassen: Syscalls bieten eine Möglichkeit, aus einem Benutzerprogramm (oder eben aus einem C-Programm heraus) Funktionen des Kernels zu benutzen; normalerweise hat man ja auf diese wichtigen, geschützten Funktionen (berechtigterweise) keinen Zugriff.
Kommen wir jetzt allerdings zum Thema Linux: was gibt es jetzt dort also für Syscalls? Die Antwort steht in der Datei /usr/src/linux-2.6.22.5-31/include/asm-i386/unistd.h. Dort sind alle Syscalls aufgeführt
(Ordnernamen können abweichen)
Doch ohne Besipiele wäre dieser Eintrag doch recht öde, von daher hier mal ein kleines Beispielprogramm:
#include <unistd.h>
int main( void )
{
write( 0, "Hallo, Welt!\n", 13 );
return 0;
}
Der hier benutzte Syscall ist write; dieser Syscall trägt die Nummer 4 (ja, jeder Syscall hat auch eine Nummer, diese steht ebenfalls in unistd.h). Was macht dieser Syscall nun? Schlichte Antwort: er gibt die Zeichenkette, die als zweiter Parameter übergeben wird, einfach aus. Wo diese Zeichenkette jetzt ausgegeben werden soll, legt der erste Parameter fest; 0 steht einfach für die Standardausgabe – den Bildschirm. Die 13 gibt einfach die Anzahl der zu schreibenden Zeichen an
(Würden wir zum Beispiel anstatt 13 die Zahl 11 angeben, wäre die Ausgabe: Hallo, Welt)
Zugegeben: dieses Programm war nicht gerade spektakulär, aber es gibt ja auch noch andere Syscalls – einfach mal ausprobieren!