Kurz und knapp: http://slides.com/pivovarit/deck#/
Allgemein
In eigener Sache: BINARIUM eröffnet
Neben meiner Tätigkeit als Java-Autor und Trainer beschäftige ich mich seit fünf Jahren mit dem Aufbau eines Museums für Heimcomputer und Videospielkonsolen. Angefangen habe ich im April 2011 mit dem Aufbau der Sammlung. Heute zählt die Sammlung etwa 800 relevante Objekte.
Nachdem die Sammlung eine hinreichende Größe erreichte, erwarb ich im Juli 2014 eine 2400 qm-Immobilie der ehemaligen Ruhrkohle AG und baute es zu einen Museum, Café/Bistro und Schulungsräumen um. tutego führt die öffentlichen Java-Trainings schon seit über einem Jahr durch, das Gastro NETZWERK ist seit Oktober geöffnet. Mit etwa einem Jahr Verspätung kann es nun auch mit dem Museum im EG losgehen.
Am 8.12.2016 eröffnet das BINARIUM, das Deutsche Museum der digitalen Kultur, in Dortmund Huckarde das Erdgeschoss. Die umfassende Sammlung bietet einen Überblick über die Videospielkonsolen und Geschichte der letzten 40 Jahre. Mehr als 200 Exponate und 20 Spielstationen erwarten euch.
2017 wird die Ausstellung mit persönlichen Computern/Heimcomputern im OG eröffnet.
Eclipse Project Oxygen (4.7) M4 Neuigkeiten
Ein neuer Milestone von Eclipse 4.7 erreicht uns. Updates dokumentiert unter https://www.eclipse.org/eclipse/news/4.7/M4/. Keine bedeutenden Änderungen für Nutzer.
PlantUML, Styling von Diagrammen
PlantUML ist ein Open Source Projekt, zum Erstellen von UML-Diagrammen in einer textuellen Sprache. Zum Beispiel:
Bob->Alice : hello
Die Heimat des Projektes ist http://plantuml.com/.
Man beschreibt sein grafisches Projekt in dieser Sprache und die Software erzeugt dann das Diagramm. Allerdings ist der Standardstyle weit vom „quasi“-Standard entfernt. Um aber auch User in Genuss dieser Software kommen zu lassen, die grafisch weniger bunte Diagramme vorziehen, bedarf es einiger Anpassungen.
Im Folgenden ein paar Anpassungen, die mit PlantUML ein Diagramm erzeugen, das mehr dem „quasi“ Standard entspricht:
skinparam monochrome true
Entfernt die Farben aus dem Diagramm
skinparam shadowing false
Entfernt den Schlagschatten
skinparam classAttributeIconSize 0
Entfernt die Custom-Icons vor Klassenattributen und Methoden (Nur Klassendiagramm)
skinparam DefaultFontName arial
Legt die Standard-Schriftart fest (Der Name ist hier Systemabhängig)
skinparam DefaultFontSize 12
Legt die Standard-Schriftgröße in Pixeln fest.
skinparam ClassFontStyle bold
Ändert die Schrift im Klassenkopf auf Fettdruck (Nur Klassendiagramm)
hide empty fields
Versteckt leere Felder zB.wenn eine Klasse keine Attribute hat.
hide circle
Versteckt das Icon vor den Klassennamen
Der Effekt:

Anzeige parametrisiert:

Zur Verwendung genannter Befehle
Um die Parameter einzusetzen, genügt es sie in dem Körper des UML-Diagrammtextes, als erstes aufzuführen z. B.:
@startuml skinparam monochrome true skinparam shadowing false skinparam classAttributeIconSize 0 skinparam DefaultFontName arial skinparam DefaultFontSize 12 skinparam ClassFontStyle bold hide empty fields hide circle ... @enduml
Des Weiteren ist es möglich, wenn man viele Diagramme hat, die man alle gleich gestalten möchte, die Parameter einmalig in einer separaten Datei anzulegen, z. B. style.iuml und diese dann per !include
einzubinden. In dieser Datei wird auf @startuml
und @enduml
verzichtet. Zur Verdeutlichung:
Inhalt der style.iuml:
skinparam monochrome true skinparam shadowing false skinparam classAttributeIconSize 0 skinparam DefaultFontName arial skinparam DefaultFontSize 12 skinparam ClassFontStyle bold hide empty fields hide circle
Inhalt einer möglichen UML-Datei
@startuml !include style.iuml ... @enduml
Autor: André Fischer
HTML-Datei in eine PDF-Datei mit java-wkhtmltopdf-wrapper
Lösungen, um aus Java heraus eine HTML-Datei eine PDF-Datei zu generieren gibt es einige, allerdings ist die Qualität nicht immer gut. Unter Zuhilfenahme der freien Software wkhtmltopdf auf der Basis der WebKit Rendering Engine gibt es mitunter bessere Ergebnisse. Für wkhtmltopdf gibt es mit java-wkhtmltopdf-wrapper von Jhonny Mertz einen passendem quelloffenen Java-Wrapper.
wkhtmltopdf
Wkhtmltopdf ist eine Open Source Applikation die Headless (ohne jegliche grafische Oberfläche) eine HTML-Datei rendert und als PDF-Datei speichert. Gesteuert wird das Programm über die Kommandozeile im folgenden Format:
$ wkhtmltopdf <<Quell-HTML>> <<Ziel-PDF>>
ein Beispiel zum besseren Verständnis:
$ wkhtmltopdf www.google.com google.pdf
Um erfolgreich aufgerufen zu werden, muss entweder die Kommandozeile im Installationsverzeichnis von wkhtmltopdf befinden oder wkhtmltopdf in den Umgebungsvariablen (PATH) hinzugefügt werden, andernfalls kann die Anwendung nicht gefunden werden.
Des weiteren kann der Applikation eine Vielzahl von Parametern übergeben werden, um das Ergebnis den eigenen Bedürfnissen anzupassen, z. B. mit dem Parameter -s kann man die Größe der PDF-Datei festlegen. Der Standard liegt hier bei DIN A4.
Ein Beispiel für DIN A3 Format:
$ wkhtmltopdf www.google.com google.pdf -s “A3“
Dies ist natürlich nur ein Bruchteil der möglichen Parameter, eine vollständige Liste in Englisch finden Sie hier:
Global Options: --collate Collate when printing multiple copies (default) --no-collate Do not collate when printing multiple copies --cookie-jar <path> Read and write cookies from and to the supplied cookie jar file --copies <number> Number of copies to print into the pdf file (default 1) -d, --dpi <dpi> Change the dpi explicitly (this has no effect on X11 based systems) -H, --extended-help Display more extensive help, detailing less common command switches -g, --grayscale PDF will be generated in grayscale -h, --help Display help --htmldoc Output program html help --image-dpi <integer> When embedding images scale them down to this dpi (default 600) --image-quality <integer> When jpeg compressing images use this quality (default 94) --license Output license information and exit -l, --lowquality Generates lower quality pdf/ps. Useful to shrink the result document space --manpage Output program man page -B, --margin-bottom <unitreal> Set the page bottom margin -L, --margin-left <unitreal> Set the page left margin (default 10mm) -R, --margin-right <unitreal> Set the page right margin (default 10mm) -T, --margin-top <unitreal> Set the page top margin -O, --orientation <orientation> Set orientation to Landscape or Portrait (default Portrait) --page-height <unitreal> Page height -s, --page-size <Size> Set paper size to: A4, Letter, etc. (default A4) --page-width <unitreal> Page width --no-pdf-compression Do not use lossless compression on pdf objects -q, --quiet Be less verbose --read-args-from-stdin Read command line arguments from stdin --readme Output program readme --title <text> The title of the generated pdf file (The title of the first document is used if not specified) -V, --version Output version information and exit Outline Options: --dump-default-toc-xsl Dump the default TOC xsl style sheet to stdout --dump-outline <file> Dump the outline to a file --outline Put an outline into the pdf (default) --no-outline Do not put an outline into the pdf --outline-depth <level> Set the depth of the outline (default 4) Page Options: --allow <path> Allow the file or files from the specified folder to be loaded (repeatable) --background Do print background (default) --no-background Do not print background --cache-dir <path> Web cache directory --checkbox-checked-svg <path> Use this SVG file when rendering checked checkboxes --checkbox-svg <path> Use this SVG file when rendering unchecked checkboxes --cookie <name> <value> Set an additional cookie (repeatable), value should be url encoded. --custom-header <name> <value> Set an additional HTTP header (repeatable) --custom-header-propagation Add HTTP headers specified by --custom-header for each resource request. --no-custom-header-propagation Do not add HTTP headers specified by --custom-header for each resource request. --debug-javascript Show javascript debugging output --no-debug-javascript Do not show javascript debugging output (default) --default-header Add a default header, with the name of the page to the left, and the page number to the right, this is short for: --header-left='[webpage]' --header-right='[page]/[toPage]' --top 2cm --header-line --encoding <encoding> Set the default text encoding, for input --disable-external-links Do not make links to remote web pages --enable-external-links Make links to remote web pages (default) --disable-forms Do not turn HTML form fields into pdf form fields (default) --enable-forms Turn HTML form fields into pdf form fields --images Do load or print images (default) --no-images Do not load or print images --disable-internal-links Do not make local links --enable-internal-links Make local links (default) -n, --disable-javascript Do not allow web pages to run javascript --enable-javascript Do allow web pages to run javascript (default) --javascript-delay <msec> Wait some milliseconds for javascript finish (default 200) --load-error-handling <handler> Specify how to handle pages that fail to load: abort, ignore or skip (default abort) --load-media-error-handling <handler> Specify how to handle media files that fail to load: abort, ignore or skip (default ignore) --disable-local-file-access Do not allowed conversion of a local file to read in other local files, unless explicitly allowed with --allow --enable-local-file-access Allowed conversion of a local file to read in other local files. (default) --minimum-font-size <int> Minimum font size --exclude-from-outline Do not include the page in the table of contents and outlines --include-in-outline Include the page in the table of contents and outlines (default) --page-offset <offset> Set the starting page number (default 0) --password <password> HTTP Authentication password --disable-plugins Disable installed plugins (default) --enable-plugins Enable installed plugins (plugins will likely not work) --post <name> <value> Add an additional post field (repeatable) --post-file <name> <path> Post an additional file (repeatable) --print-media-type Use print media-type instead of screen --no-print-media-type Do not use print media-type instead of screen (default) -p, --proxy <proxy> Use a proxy --radiobutton-checked-svg <path> Use this SVG file when rendering checked radiobuttons --radiobutton-svg <path> Use this SVG file when rendering unchecked radiobuttons --run-script <js> Run this additional javascript after the page is done loading (repeatable) --disable-smart-shrinking Disable the intelligent shrinking strategy used by WebKit that makes the pixel/dpi ratio none constant --enable-smart-shrinking Enable the intelligent shrinking strategy used by WebKit that makes the pixel/dpi ratio none constant (default) --stop-slow-scripts Stop slow running javascripts (default) --no-stop-slow-scripts Do not Stop slow running javascripts --disable-toc-back-links Do not link from section header to toc (default) --enable-toc-back-links Link from section header to toc --user-style-sheet <url> Specify a user style sheet, to load with every page --username <username> HTTP Authentication username --viewport-size <> Set viewport size if you have custom scrollbars or css attribute overflow to emulate window size --window-status <windowStatus> Wait until window.status is equal to this string before rendering page --zoom <float> Use this zoom factor (default 1) Headers And Footer Options: --footer-center <text> Centered footer text --footer-font-name <name> Set footer font name (default Arial) --footer-font-size <size> Set footer font size (default 12) --footer-html <url> Adds a html footer --footer-left <text> Left aligned footer text --footer-line Display line above the footer --no-footer-line Do not display line above the footer (default) --footer-right <text> Right aligned footer text --footer-spacing <real> Spacing between footer and content in mm (default 0) --header-center <text> Centered header text --header-font-name <name> Set header font name (default Arial) --header-font-size <size> Set header font size (default 12) --header-html <url> Adds a html header --header-left <text> Left aligned header text --header-line Display line below the header --no-header-line Do not display line below the header (default) --header-right <text> Right aligned header text --header-spacing <real> Spacing between header and content in mm (default 0) --replace <name> <value> Replace [name] with value in header and footer (repeatable) TOC Options: --disable-dotted-lines Do not use dotted lines in the toc --toc-header-text <text> The header text of the toc (default Table of Contents) --toc-level-indentation <width> For each level of headings in the toc indent by this length (default 1em) --disable-toc-links Do not link from toc to sections --toc-text-size-shrink <real> For each level of headings in the toc the font is scaled by this factor (default 0.8) --xsl-style-sheet <file> Use the supplied xsl style sheet for printing the table of content
Quelle: http://wkhtmltopdf.org/usage/wkhtmltopdf.txt
java-wkhtmltopdf-wrapper
Dank der Zuhilfenahme des wkhtmltopdf-wrappers, welchen ich in mein Projekt eingebunden habe, durch die Einbindung der Maven-Dependency, ist es nun recht mühelos mit wkhtmltopdf aus Java heraus zu arbeiten. Am einfachsten ist es, denke ich, an einem Codebeispiel mit Kommentaren zu erkennen:
import java.io.IOException; import com.github.jhonnymertz.wkhtmltopdf.wrapper.Pdf; import com.github.jhonnymertz.wkhtmltopdf.wrapper.configurations.WrapperConfig; import com.github.jhonnymertz.wkhtmltopdf.wrapper.page.PageType; import com.github.jhonnymertz.wkhtmltopdf.wrapper.params.Param; public class WkhtmltopdfTest { public static void main( String[] args ) { // Erzeugen eines neuen Pdf Objekts als Parameter wir eine WrapperConfig übergeben, die den Pfad der wkhtmltopdf.exe definiert. Pdf pdf = new Pdf(new WrapperConfig("C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe")); //Hinzufügen einer test HTML-Datei und Festlegung auf den Typ File aus dem Enum PageType pdf.addPage( "C:\\test\\test.html", PageType.file ); //Hinzufügen diverser Parameter wie Format, Orientierung und Randgröße pdf.addParam( new Param( "-s", "A6" ), new Param( "-O", "landscape" ), new Param( "-B", "0" ), new Param( "-R", "0" ), new Param( "-T", "0" ), new Param( "-L", "0" ) ); try { //Speichern der PDF-Datei unter dem angebenen Pfad pdf.saveAs( "C:\\test\\test.pdf" ); } catch ( IOException | InterruptedException e ) { e.printStackTrace(); } } }
Dieses Programm erzeugt aus einer HTML-Datei mit dem Namen “test.html“, welche im Ordner “C:\test\“ liegt, eine “test.pdf“ im selben Verzeichnis.
Autor: André Fischer
Nicht-Java-News: HTML 5.1 verabschiedet
Eine Erweiterung vom HTML 5-Standard ist beschlossen, HTML 5.1 ist verabschiedet. Details und insbesondere Änderungen unter https://www.w3.org/TR/html51/changes.html#features-added.
Von char in int: vom Zeichen zur Zahl
Wenn Zeichen aus Benutzereingaben stammen stellt sich die Anforderung, diese in die Zahl zu konvertieren. Aus der Ziffer ‚5‘ soll das der numerische Wert 5 folgen. Nach alter Hacker-Tradition war die Lösung immer die, eine ‚0‘ abzuziehen. Die ASCII-Null ‚0‘ hat den char-Wert 48, ‚1‘ dann 49, bis ‚9‘ schließlich 57 erreicht. So ist logischerweise ‚5‘ – ‚0‘ = 53 – 48 = 5. Die Lösung hat einen Nachteil, dass sie nur für ASCII-Ziffern funktioniert.
Eine ordentliche Java-Lösung besteht zum Beispiel darin, ein char in ein String zu konvertieren und diesen über eine Integer-Methode zu konvertieren, etwa so:
char c = '5'; int i = Integer.parseInt( String.valueOf(c) ); // 5
Die parseInt(…)-Methode ist voll internationalisiert und konvertiert ebenso Dezimalzahlen aus anderen Schriftsystemen, etwa Hindi/Sanskrit:
System.out.println( Integer.parseInt( "५" ) ); // 5
Das funktioniert, ist jedoch für einzelne Zeichen nicht besonders effizient in Schleifen. Es gibt zwei andere Möglichkeiten, mit statischen Methoden aus der Klasse Character.
getNumericValue(…)-Methode
Die Character-Methode getNumericValue(char) liefert den numerischen Wert einer Ziffer zurück; natürlich arbeitet die Methode wieder internationalisiert:
int i = Character.getNumericValue( '5' ); System.out.println( i ); // 5 System.out.println( Integer.parseInt( "५" ) ); // 5
Die Methode ist viel leistungsfähiger, denn sie kennt den tatsächlichen „Wert“ aller Unicode-Zeichen. Zum Beispiel auch der römischen Ziffern Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ, Ⅼ, Ⅽ, Ⅾ, Ⅿ, …, die im Unicode-Alphabet ab ‚\u2160‘ stehen:
System.out.println( Character.getNumericValue( '\u216f' ) ); // 1000
XXXdigit(…)-Methoden
Die Character-Klasse besitzt ebenso eine Umwandlungsmethode für Ziffern bezüglich einer beliebigen Basis, das auch in die andere Richtung.
final class java.lang.Character
implements Serializable, Comparable<Character>
- staticintdigit(charch,intradix)
Liefert den numerischen Wert, den das Zeichen ch unter der Basis radix Beispielsweise ist Character.digit(‚f‘, 16) gleich 15. Erlaubt ist jedes Zahlensystem mit einer Basis zwischen Character.MIN_RADIX (2) und Character.MAX_RADIX (36). Ist keine Umwandlung möglich, beträgt der Rückgabewert –1. - staticcharforDigit(intdigit,intradix)
Konvertiert einen numerischen Wert in ein Zeichen. Beispielsweise ist forDigit(6, 8) gleich „6“ und Character.forDigit(12, 16) ist „c“.
Beispiel: Konvertiere eine Zeichenkette mit Ziffern in eine Ganzzahl.
char[] chars = { '3', '4', '0' }; int result = 0; for ( char c : chars ) { result = result * 10 + Character.digit( c, 10 ); System.out.println( result ); }
Die Ausgabe ist 3, 34 und 340.
Statischer Import
Die import-Deklaration informiert den Compiler über die Pakete, sodass ein Typ nicht mehr voll qualifiziert werden muss, wenn er im import-Teil explizit aufgeführt wird oder wenn das Paket des Typs über * genannt ist.
Falls eine Klasse statische Methoden oder Konstanten vorschreibt, werden ihre Eigenschaften immer über den Typnamen angesprochen. Java bietet mit dem statischen Import die Möglichkeit, die statischen Methoden oder Variablen ohne vorangestellten Typnamen sofort zu nutzen. Während also das normale import dem Compiler Typen benennt, macht ein statisches import dem Compiler Klasseneigenschaften bekannt, geht also eine Ebene tiefer.
Beispiel: Binde für die Bildschirmausgabe die statische Variable out aus System statisch ein:
import static java.lang.System.out;
Bei der sonst üblichen Ausgabe über System.out.printXXX(…) kann nach dem statischen Import der Klassenname entfallen, und es bleibt beim out.printXXX(…)
Bilden wir in einem Beispiel mehrere statische Eigenschaften mit einem statischem import ein:
import static java.lang.System.out; import static javax.swing.JOptionPane.showInputDialog; import static java.lang.Integer.parseInt; import static java.lang.Math.max; import static java.lang.Math.min; class StaticImport { public static void main( String[] args ) { int i = parseInt( showInputDialog( "Erste Zahl" ) ); int j = parseInt( showInputDialog( "Zweite Zahl" ) ); out.printf( "%d ist größer oder gleich %d.%n", max(i, j), min(i, j) ); } }
Mehrere Typen statisch importieren
Der statische Import
import static java.lang.Math.max; import static java.lang.Math.min;
bindet die statische max(…)/min(…)-Methode ein. Besteht Bedarf an weiteren statischen Methoden, gibt es neben der individuellen Aufzählung eine Wildcard-Variante:
import static java.lang.Math.*;
Best Practice: Auch wenn Java diese Möglichkeit bietet, sollte der Einsatz maßvoll erfolgen. Die Möglichkeit der statischen Importe ist nützlich, wenn Klassen Konstanten nutzen wollen, allerdings besteht auch die Gefahr, dass durch den fehlenden Typnamen nicht mehr sichtbar ist, woher die Eigenschaft eigentlich kommt und welche Abhängigkeit sich damit aufbaut. Auch gibt es Probleme mit gleichlautenden Methoden: Eine Methode aus der eigenen Klasse überdeckt statische importierte Methoden. Wenn also später in der eigenen Klasse – oder Oberklasse – eine Methode aufgenommen wird, die die gleiche Signatur hat wie eine statisch importierte Methode, wird das zu keinem Compilerfehler führen, sondern sich die Semantik ändern, weil jetzt die neue eigene Methode verwendet wird, und nicht mehr die statisch importierte.
Eclipse 4.7 M3 (Oxygen)
Alle Neuigkeiten unter https://www.eclipse.org/eclipse/news/4.7/M3/.
Für mich interessanter sind:
Ctrl+E command improvements | You can use the Quick Switch Editor (Ctrl+E) command to list and filter all the open editors. This works now also if you have selected a view in the editor area. You can filter the list using wildcards, and select editors using mouse or keyboard.Now you can also cycle through the list by pressing Ctrl+E again. Or use Arrow Up/Down as before.
|
Na endlich:
Escape text when pasting into a string literal | The Java > Editor > Typing > Escape text when pasting into a string literalpreference option is now enabled by default. This will escape the special characters in pasted strings when they are pasted into an existing string literal.![]() To paste without escaping, you can either paste outside of a string literal, or you can disable Edit > Smart Insert Mode. |
Java 9 bekommt Ahead-of-Time-Compiler
Jaxenter:
Was im September 2016 im JEP 295 vorgeschlagen wurde, ist nun offiziell dem Java-9-Release zugewiesen: Ahead-of-Time-Kompilierung wird Einzug in die Java-VM halten.
Initialisierung von Klassenvariablen
Wo werden eigentlich Klassenvariablen initialisiert? Im Konstruktor ergibt dies keinen Sinn, da für Klassenvariablen keine Objekte angelegt werden müssen. Dafür gibt es den static{}-Block. Dieser wird immer dann ausgeführt, wenn der Klassenlader eine Klasse in die Laufzeitumgebung geladen hat. Für eine statische Initialisierung wird also wieder der Compiler etwas einfügen:
Was wir schreiben | Was der Compiler generiert |
class Beer { static String isFreeFor = „Homer“; } |
class Beer { static String isFreeFor; static { isFreeFor = „Homer“; } } |
Klassenintialisierer sind nicht ganz ungefährlich, denn wenn der Code eine Ausnahme auslöst, dann gibt es einen harten lang.ExceptionInInitializerError. Leser können das testen, in dem geändert wird:
static String isFreeFor = „Homer“.substring( -1 );
und dann aus dem Hauptprogramm aufrufen:
out.println( Beer.isFreeFor );
Aufgebaute Exemplare mitzählen
Ein Konstruktor soll die Anzahl der erzeugten Objekte mitzählt; eine statische Methode liefert später die bis dahin gebauten Exemplare:
public class Rollercoaster { private static int numberOfInstances; { numberOfInstances++; } public static int getNumberOfInstances() { return numberOfInstances; } public static void main( String[] args ) { new Rollercoaster(); new Rollercoaster(); System.out.println( Rollercoaster.getNumberOfInstances() ); // 2 } }
Die statische Variable numberOfInstances wird bei jedem neuen Exemplar über den Konstruktor hochgesetzt. Direkt ausgeschrieben ist der Konstruktor nicht, sondern es findet ein Exemplarinitialisierer Anwendung, da der Compiler den Code automatisch in jeden Konstruktor kopiert. Das hat den Vorteil, dass Entwickler später problemlos neue Konstuktoren für den Rollercoaster hinzufügen können, ohne das Inkrement der statischen Variable immer im Hinterkopf behalten zu müssen.
Hinweis: Bei nebenläufigen Zugriffen auf statische Variablen kann es zu Problemen kommen. Deshalb müssen wir spezielle Synchronisationsmechanismen nutzen – die das Beispiel allerdings nicht verwendet. Statische Variablen können auch schnell zu Speicherproblemen führen, da Objektreferenzen sehr lange gehalten werden. Der Einsatz muss wohldurchdacht sein.
Eclipse Oxygen (4.7) M2 Neuigkeiten
Alle Neuigkeiten unter https://www.eclipse.org/eclipse/news/4.7/M2/.
Für mich als Java-Programmierer ist eignetlich nur das interessant:
Method result after step operations | During debugging, the last method result (per return or throw) that was observed duringStep Into, Step Over or Step Return, is shown as first line in the Variables view.![]() This can be disabled with the new option Preferences > Java > Debug > Show method result after a step operation (if supported by the VM; may be slow) |
JDK/Java SE 8u111/u112
GWT 2.8.0 ist raus
Details zu den Änderungen unter http://www.gwtproject.org/release-notes.html. Toll ist die Unterstützung von Java 8.
- Started using ES6 Maps when available for HashMap/HashSet that yields up 3x performance improvements.
- Partial support for Java 8 standard library APIs (see below for full list).
- Source level set to Java 8.
- Static and default methods in interfaces aren’t visible to generators. If you want to take advantage of those Java-8isms, you’re encouraged to switch to an annotation processor. This could break existing build if an interface is changed to turn a non-default method into a default method.
- Emulate
java.io.UncheckedIOException
. - Emulate
Optional<T>
and its int, long, double variants. - Emulate
Objects.requireNonNull()
with message Supplier. - Fix Math.min/max(float/double) emulation behavior.
- Emulate
Character.isBmpCodePoint()
. - Emulate
CharSequence.chars()
. - Emulate
java.lang.SecurityException
. - Emulate Java 8 API of
java.util.Arrays
,java.util.ArrayDeque
,java.math.BigInteger
,java.util.BitSet
,java.util.Comparator
,java.util.function
,java.util.Iterator
,java.lang.Iterable
,java.util.IntSummaryStatistics/LongSummaryStatistics/DoubleSummaryStatistics
java.util.Collection/Lists/Queues
,java.util.Map
,java.util.logging.Logger
,java.util.PrimitiveIterator
,java.util.Spliterator
,java.util.stream
,java.util.StringJoiner
Java 9 2017/07/27 General Availability
So gesagt in http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-October/005092.html:
2016/05/26 Feature Complete 2016/12/22 Feature Extension Complete 2017/01/05 Rampdown Start 2017/02/09 All Tests Run 2017/02/16 Zero Bug Bounce 2017/03/16 Rampdown Phase 2 2017/07/06 Final Release Candidate 2017/07/27 General Availability
Naja, schauen wir mal.
Termine 2016 öffentlicher Seminare (Java 8)
JavaServer Pages (JSP) und Servlets (›JSP‹)
Das JSP/Servlet-Seminar vermittelt den Aufbau dynamische Webseiten mit der JSP und Servlet Technologie. JavaServer Pages (JSP) übernehmen bei der Trennung von Visualisierung und Applikationscode die Darstellung, JavaBeans die Daten und Logik. Das Protokoll …
In Dortmund 23.11.-25.11.2016
Java 8 Neuerungen (›JAVA8‹)
Java 8 bringt große Änderungen an der Sprache mit sich, die die Programmierung deutlich beeinflusst. Die größte Sprachänderungen von Java 8 betreffen Lambda-Ausdrücke, dazu gesellen sich Default-Methoden und statische Schnittstellenmethoden. Teilnehmer …
In Dortmund als Eintagesschulung am 21.11.2016
Java Grundlagen (›JAVA1‹)
Durch ihre Plattformunabhängigkeit sind Java-Programme auf unterschiedlichen Computersystemen ablauffähig. Ihre hohe Performanz und Robustheit macht Java zu einer beliebten Sprache für kritische Serverkomponenten. In diesem Seminar lernen die Teilnehmer …
In Dortmund KW 46 14.11.-18.11.2016 und wieder in 2017
Der Kurs richtet sich an Teilnehmer, die bereits Erfahrung in der objektorientierten Programmiersprache C++ haben und jetzt die Eigenschaften von Java kennen lernen wollen. Mit den leistungsfähigen Bibliotheken lernen die Teilnehmer nebenläufige Programme …
In Dortmund vom 07.11.-11.11.2016 (KW 45) zusammen mit dem Seminar Java für C#-Programmierer
Java für C#-Programmierer (›CS2JAVA‹)
Der Kurs richtet sich an Teilnehmer, die bereits Erfahrung in der objektorientierten Programmiersprache C# und dem .NET-Framework haben und jetzt die Eigenschaften von Java kennen lernen wollen. Mit den leistungsfähigen Java-Bibliotheken lernen die Teilnehmer …
In Dortmund vom 07.11.-11.11.2016 (KW 45) zusammen mit dem Seminar Java für C++-Programmierer
Java 9 kommt mal wieder später, Juni 2017?
So sagt es Mark Reinhold http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-September/004887.html.
Oracles NetBeans geht zu Apache
So ist jedenfalls der Plan, weitere Infos unter https://wiki.apache.org/incubator/NetBeansProposal.
JavaZone 2016 Präsentationen online
Auf Vimeo: https://vimeo.com/album/4133413/