IP-FAQ-OS_indipendent_JAVA - Technische Universität Darmstadt

Werbung
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?
:
Herunterladen