Technische Universität Darmstadt Telecooperation FAQ Session – Assignment 1 FG Telekooperation Prof. Max Mühlhäuser Dirk Bradler, Julian Schröder-Bernhardi Copyrighted material; for TUD student use only : Prof. Dr. M. Mühlhäuser Telekooperation © Outline • Wie programmiere ich in Java plattform unabhängig – – – – Path-Separator AWT SWING SWT : Prof. Dr. M. Mühlhäuser Telekooperation © Path-Separator • Viele Tricks – 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 : Prof. Dr. M. Mühlhäuser Telekooperation © 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"); : Prof. Dr. M. Mühlhäuser Telekooperation © 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 : Prof. Dr. M. Mühlhäuser Telekooperation © 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 : Prof. Dr. M. Mühlhäuser Telekooperation © 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 : Prof. Dr. M. Mühlhäuser Telekooperation © 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 : Prof. Dr. M. Mühlhäuser Telekooperation © 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); } } : Prof. Dr. M. Mühlhäuser Telekooperation © 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 : Prof. Dr. M. Mühlhäuser Telekooperation © 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); : Prof. Dr. M. Mühlhäuser Telekooperation © 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(); } } : Prof. Dr. M. Mühlhäuser Telekooperation © Fazit • Swing am angenehmsten • Geschwindigkeit zumindest vergleichbar • Vollständige Plattformunabhängigkeit : Prof. Dr. M. Mühlhäuser Telekooperation © Erinnerung • Assignment sheet on the Web page of the Praktikum • Milestones: 1. TCP client and server 2. Simple Web server 3. 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 [email protected] CC at [email protected] : Prof. Dr. M. Mühlhäuser Telekooperation © Erinnerung In each assignment, return the following: 1. 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 2. 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 : Prof. Dr. M. Mühlhäuser Telekooperation © What You Need to Do (2) 3. Test cases used • Test cases may be defined informally in the written report or formally with JUnit tests 4. The names and Martikel numbers of all people in the group must be present in the written report and in the e-mail 5. Subject [IPWS0809][Assignment X | Question][Group Y] • Return as a zip-file by email to [email protected] • CC: [email protected] : Prof. Dr. M. Mühlhäuser Telekooperation © Questions? :