FAQ Session – Assignment 1 FG Telekooperation Prof. Max Mühlhäuser Dirk Bradler, Julian Schröder-Bernhardi :
Outline Wie programmiere ich in Java plattform unabhängig Path-Separator AWT SWING SWT :
Path-Separator Viele Tricks Der sichere Weg: http://www.java1.de/basicjava/5.7_IO.html Der sichere Weg: Benutzen von File.separator oder File.pathSeparator wenn Strings mit Pfade erzeugt werden Und/oder File objects anstelle von Strings, wenn ein Pfad benötigt wir :
Path-Separator Using File.pathSeparator in Strings String myRelativePath = "mydir" + File.pathSeparator + "myFile.txt"; A path using '/' within File is always translated correctly // in Unix remains as it is, in Windows translates to C:\mydirectory\myfile.txt File myFile = new File("/mydirectory/myfile.txt"); :
Path-Separator Java liefert alles was benötigt wird System.getProperty("os.name"); System.getProperty("file.separator"); System.getProperty("path.separator"); System.getProperty("line.separator"); System.getProperty("os.version"); ABER einfacher: Immer „/“ verwenden Funktioniert bei allen *NIX-Systemen + MAC Wird von Windows API unterstützt Homeverzeichnis finden mittels System.getProperty("user.home") Sowohl auf *NIX als auf Windows Systemen :
AWT „Abstract Window Toolkit“ Seit1995 Nur GUI Komponenten umgesetzbar, die auf allen Plattformen verfügbar sind Guter Ansatz, jedoch Nicht leistungsfähig genug Nicht wirklich ansprechend :
Swing Seit 1998 Früher sehr langsam Heute besser Implementierung in *NIX und Windows identisch Sieht seid JDK 5 sowieso besser aus Der Standard-Stil (Look&Feel) ist immer noch häßlich :
Swing Java zeichnet die Komponenten selbst Seit JDK 1.6 mit stärkerem Hardware-Support und Beschleunigung durch native Komponenten Immer noch plattformunabhängig! Swing-Komponenten werden direkt von Java gerendert Nicht von nativen Betriebssystemkomponenten abhängig Alle Swing-Komponenten auf allen Plattformen gleich Manche Swing-Anwendungen (vor allem alte) wirken betriebssystem-fremd Durch entsprechenden Pluggable Look-and-Feels kompensieren :
Simple „Hello World“ via Swing (Danke an Wikipedia) import javax.swing.*; class HelloWorldSwing { public static void main(String[] args) { Runnable guiCreator = new Runnable() { public void run() { JFrame fenster = new JFrame("Hallo Welt mit Swing"); fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("Hallo Welt"); fenster.getContentPane().add(label); fenster.setSize(300, 200); fenster.setVisible(true); } }; SwingUtilities.invokeLater(guiCreator); :
SWT „Standart Widget Toolkit“ Seit 2001 Idee: Nutzung der nativen Widget und zusätzlicher Implementierungen Funktioniert unter Windows Funktioniert unter *NIX Aber Implementierung ist nicht plattformunabhängig SWT muss auf das jeweilige OS portiert werden Lässt sich theoretisch plattformunabhängig schreiben und packen :
SWT Benötigte Pakete: org.eclipse.swt.*; org.eclipse.swt.widgets.*; Ein Display-Objekt repräsentiert das zugrundeliegende Windows-System: Display display = new Display(); Ein Shell-Objekt enthält die einzelnen Elemente (Widgets). Es ist vergleichbar mit dem JFrame in Swing: Shell shell = new Shell(display); :
Simple „Hello World“ via SWT import org.eclipse.swt.widgets.*; import org.eclipse.swt.*; public class HelloWorld { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); Label label = new Label(shell, SWT.NONE); label.setText("Hello, World!"); shell.pack(); label.pack(); shell.open(); while (!shell.isDisposed()) if (!display.readAndDispatch()) display.sleep(); display.dispose(); label.dispose(); } :
Fazit Swing am angenehmsten Geschwindigkeit zumindest vergleichbar Vollständige Plattformunabhängigkeit :
Erinnerung Assignment sheet on the Web page of the Praktikum Milestones: TCP client and server Simple Web server Web server improvements Important: pay attention to error-semantics, be conservative (i.e. follow the RFC) in what you send Deadline for returning: 05.11.2008 at 12:00 To be returned: Code with comments, test cases used Send at bradler@tk.informatik.tu-darmstadt.de CC at jschroed@tk.informatik.tu-darmstadt.de :
Erinnerung In each assignment, return the following: Compiled JAR-File Executable!!! Including Java source code The code should follow the coding guidelines given on the next pages Code not following the guidelines may be graded inferior compared with functionally equivalent code that does follow them Short written report What you have done, what is missing, how you implemented it Describe design choices, why you did them, etc. UML diagram is ok, if you know UML :
What You Need to Do (2) Test cases used Test cases may be defined informally in the written report or formally with JUnit tests The names and Martikel numbers of all people in the group must be present in the written report and in the e-mail Subject [IPWS0809][Assignment X | Question][Group Y] Return as a zip-file by email to bradler@tk.informatik.tu-darmstadt.de CC: jschroed@tk.informatik.tu-darmstadt.de :
Questions? :