Java SE Embedded Compact Profiles

Hat ein System beschränkten Speicher, wird es knapp für das gesamte Java SE. Daher gibt es Teilmengen der Java SE, genannt Profiles, die nur knapp über 11 MiB benötigen. Im Moment gibt es drei Profile, also drei Teilmengen der Java SE, die jeweils immer etwas mehr können. compact1 ist die kleinste Teilmenge, wo zum Beispiel die Kernklassen enthalten sind, compact2 nimmt die API für Datenbankverbindungen mit auf, compact3 kann dann XML-Verarbeitung und die komplette Java SE grafische Oberflächen darstellen oder Web-Services deklarieren.

Jede Klasse ist einem Profil zugeordnet, was der Compiler statisch prüfen kann – solange der Klassenname nicht dynamisch bestimmt wird. So lässt sich sicherstellen, dass nur Typen referenziert werden, die auch in einem Profil sind.

Oracle Java Standard Edition Embedded (Oracle Java SE Embedded)

Oracle unterstützt mit der Oracle Java Standard Edition Embedded (Oracle Java SE Embedded)[1] Profile. Allerdings laden Entwickler keine einfache Laufzeiumgebung herunter, sondern ein Werkzeug JRECreate, mit dem eine Laufzeitumgebung mit unseren eigenen Paketen für ein bestimmtes System generiert wird. Drei Laufzeitumgebungen sind wählbar: eine Minimal-JVM, Client JVM (schnelle Reaktionsfähigkeit), Server JVM (verbraucht mehr Hauptspeicher). Sehr fein kann dann bestimmt werden, ob JavaFX mit dabei sein soll, oder welche Sprachübersetzungen mit ausgeliefert werden. Am Ende steht ein Verzeichnis mit bin und JRE, lib und Java-Archiven, Konfigurationen und – das darf bei Oracle auf keinen Fall fehlen – Copyright- und Lizenz-Dokumenten.

[1]      http://www.oracle.com/technetwork/java/embedded/embedded-se/downloads/index.html

Eclipse 4.6 (Neon) News

Alle News unter https://www.eclipse.org/eclipse/news/4.6/platform.php.

Interessant sind:

Commands and shortcuts to zoom in text editors In text editors, you can now use Zoom In (Ctrl++ or Ctrl+=) and Zoom Out (Ctrl+-) commands to increase and decrease the font size.Like a change in the General > Appearance > Colors and Fonts preference page, the commands persistently change the font size in all editors of the same type. If the editor type’s font is configured to use a default font, then that default font will be zoomed.
Full Screen The Full Screen feature is now also available on Windows and Linux. You can toggle the mode via shortcut (Alt+F11) or menu (Window > Appearance > Toggle Full Screen).When Full Screen is activated, you’ll see a dialog which tells you how to turn it off again.

On the Mac, Window > Toggle Full Screen (Control+Command+F) still works as before.

Substring code completion Content Assist now supports substring patterns. Enter any part of the desired proposal’s text, and Content Assist will find it! For example, completing on selection proposes all results containing selection as a substring.Popup with proposals like addSelectionListener(..), getSelection(), etc.

This feature can be disabled using the Show substring matches option on the Java > Editor > Content Assist preference page.

Clean Up to remove redundant type arguments A new option to remove redundant type arguments has been added under the „Unnecessary Code“ group of the Clean Up profile.
Create new fields from method parameters You can now assign all parameters of a method or constructor to new fields at once using a newQuick Assist (Ctrl+1):Assign all parameters to new fields
Quick Fix to configure problem severity You can now configure the severity of a compiler problem by invoking the new Quick Fix (Ctrl+1) which opens the Java > Compiler > Errors/Warnings preference page and highlights the configurable problem.

The Quick Fix icon may look familiar to you. In older Eclipse versions, this was a toolbar button in enriched hovers (i.e., you had to press F2 or move the mouse into the hover to see it).

 

 

 

Interessante Open-Source-Libs Mai

Update von Retrolambda

Java 8 Sprachfeatures für Java 7, 6, 5 VM. Details unter https://github.com/orfjackal/retrolambda. Die Updates von letzter Woche:

Retrolambda 2.3.0 (2016-04-30)

  • Optimize generated code to reduce method count (Issue #81)
  • Fix method reference to protected method in base class in other package failing with IllegalAccessError (Issue #89)

Retrolambda 2.2.0 (2016-04-29)

  • Backports calls to Objects.requireNonNull, improving JDK 9 support (Issue #75)
  • Optimize generated code to reduce method count (Issue #81)

Java SE 8u9[1|2] Update

Alles News unter http://www.oracle.com/technetwork/java/javase/8all-relnotes-2226344.html.

Interessanbt finde ich unter anderem:

New JVM Options added: ExitOnOutOfMemoryError and CrashOnOutOfMemoryError
Two new JVM flags have been added:

  • ExitOnOutOfMemoryError – When you enable this option, the JVM exits on the first occurrence of an out-of-memory error. It can be used if you prefer restarting an instance of the JVM rather than handling out of memory errors.
  • CrashOnOutOfMemoryError – If this option is enabled, when an out-of-memory error occurs, the JVM crashes and produces text and binary crash files (if core files are enabled).

See JDK-8138745.

Und:

Disable MD5withRSA signature algorithm in the JSSE provider
The MD5withRSA signature algorithm is now considered insecure and should no longer be used. Accordingly, MD5withRSA has been deactivated by default in the Oracle JSSE implementation by adding „MD5withRSA“ to the „jdk.tls.disabledAlgorithms“ security property. Now, both TLS handshake messages and X.509 certificates signed with MD5withRSA algorithm are no longer acceptable by default. This change extends the previous MD5-based certificate restriction („jdk.certpath.disabledAlgorithms“) to also include handshake messages in TLS version 1.2. If required, this algorithm can be reactivated by removing „MD5withRSA“ from the „jdk.tls.disabledAlgorithms“ security property.

JDK-8144773 (not public)

 

Bouncing ball in a Swing window

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BouncingBall {

  private static class BallPanel extends JPanel {

    // http://www.iconfinder.com/icondetails/8839/64/beach_ball_tourism_toys_icon
    private final Icon ball = new ImageIcon( BouncingBall.class.getResource( "ball.png" ) );
    private int ballX, ballY, dx = 2, dy = 2;

    public BallPanel() {
      new Timer( 10, new ActionListener() {
        @Override
        public void actionPerformed( ActionEvent evt ) {
          ballX += dx;
          ballY += dy;

          if ( ballX <= 0 || ballX + ball.getIconWidth() >= getWidth() )
            dx = -dx;
          if ( ballY <= 0 || ballY + ball.getIconHeight() >= getHeight() )
            dy = -dy;

          repaint();
        }
      } ).start();
    }

    @Override
    public void paint( Graphics g ) {
      Graphics2D g2d = (Graphics2D) g;
      g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
      g2d.setRenderingHint( RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );

      g2d.setColor( Color.WHITE );
      g2d.fill( getBounds() );

      ball.paintIcon( null, g2d, ballX, ballY );
    }
  }

  public static void main( String[] args ) {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    f.setIgnoreRepaint( true );
    f.add( new BallPanel() );
    f.setBounds( 200, 100, 400, 200 );
    f.setVisible( true );
  }
}

Offene Stelle Junior Software-Entwickler in Frankfurt

Zur Unterstützung unseres Teams suchen wir eine(n)

Junior Software – Entwickler / Developer Java (m/w)

 

Ihre Aufgaben:
  • Mitarbeit an der Weiterentwicklung unserer Java Software-Produkte für statistische Fragestellungen
  • Mitarbeit an der Neuentwicklung eines Frameworks zur Automatisierung unserer Arbeitsabläufe und zur Integration in bestehende Auswertungssysteme unseres Kunden
  • Mitarbeit an der Weiterentwicklung unserer bestehenden Java-Software zum Einsatz in Big Data Umfeldern

 

Ihr Profil:
  • abgeschlossenes Studium mit IT-Bezug bzw. eine entsprechende Ausbildung zum (Fach)-Informatiker
  • gute Kenntnisse in Core Java, Java EE, Java SE (relevante Uni-, Ausbildungs- oder Praxiserfahrung)
  • gute Kenntnisse in Eclipse, Git, Linux Shell
  • Praxiserfahrung als Softwareentwickler wünschenswert
  • Selbständiges Arbeiten
  • Teamfähigkeit, Engagement und Kreativität
  • sehr gute Deutschkenntnisse in Wort und Schrift

 

Wir bieten:
  • unbefristete Festanstellung
  • interessante Aufgaben und überdurchschnittliche finanzielle Entwicklungsmöglichkeiten
  • kleines, motiviertes Team mit flachen Hierarchien
  • freundliches und dynamisches Arbeitsumfeld in der Frankfurter Innenstadt (S/U-Bahn-Station Konstablerwache)
  • eine solide berufliche Zukunft
  • flexible Arbeitszeiten
  • Reisetätigkeit nur in Ausnahmefällen
  • Beginn ab sofort, bzw. nach Absprache

 

Interesse:
  • Dann freuen wir uns unter dem Betreff „Stellenangebot Junior Software-Entwickler / Developer Java” auf Ihre aussagekräftige Bewerbung (ausschließlich via E-Mail) mit Angabe der Gehaltsvorstellung und des möglichen Eintrittstermins.

 

Ankordata
Ankordata GmbH & Co. KG
Jens Grüntjes
Zeil 57
60313 Frankfurt
Tel.: 069 / 92 88 79-18
E-Mail: jens.gruentjes@ankordata.de
Anzeige online unter http://www.ankordata.de/homepage/Jobs.action.

Das Ende vom Java-Plugin für Web-Browser

Oracle hat angekündigt, dass das Java-Plugin für Web-Browser mit dem Erscheinen von Java 9 im nächsten Jahr nicht mehr weiterentwickelt wird.

Nachdem Mozilla Firefox und auch Google Chrome ankündigten, das Java-Plugin nicht mehr weiter unterstützen zu wollen, sind das offenbar u. a. Gründe für den Abschied vom Browser-Plugin.

Der Anteil von Java-Applets ist ohnehin kaum noch „messbar“, spätestens mit dem Java 7 Update 51, mit dem die Sicherheitsmechanismen für Java-Applets noch einmal deutlich überarbeitet wurden, sind Java-Applets in „freier Wildbahn“ kaum noch zu finden.

Oracle empfiehlt als Ersatz Java WebStart, das ohne das Plugin auskommt.

Apache POI 3.14-beta1 ist erschienen

Was es für Änderungen gibt? https://poi.apache.org/changes.html

The Apache POI team is pleased to announce the release of 3.14-beta1. Featured are a handful of new areas of functionality – including basic support for the XML Visio format – and numerous bug fixes.

A summary of changes is available in the Release Notes. A full list of changes is available in the change log. People interested should also follow the dev list to track progress.

The POI source release as well as the pre-built binary deployment packages are listed below. Pre-built versions of all POI components are available in the central Maven repository under Group ID „org.apache.poi“ and Version „3.14-beta1“

Alles Gute …

… zum Weihnachtsfest und einen guten Rutsch ins neue Jahr.

          *             ,
                       _/^\_
                      <     >
     *                 /.-.\         *
              *        `/&\`                   *
                      ,@.*;@,
                     /_o.I %_\    *
        *           (`'--:o(_@;
                   /`;--.,__ `')             *
                  ;@`o % O,*`'`&\ 
            *    (`'--)_@ ;o %'()\      *
                 /`;--._`''--._O'@;
                /&*,()~o`;-.,_ `""`)
     *          /`,@ ;+& () o*`;-';\
               (`""--.,_0 +% @' &()\
               /-.,_    ``''--....-'`)  *
          *    /@%;o`:;'--,.__   __.'\
              ;*,&(); @ % &^;~`"`o;@();         *
              /(); o^~; & ().o@*&`;&%O\
        jgs   `"="==""==,,,.,="=="==="`
           __.----.(\-''#####---...___...-----._
         '`         \)_`"""""`
                 .--' ')
               o(  )_-\
                 `"""` `

Inselraus: Swings Farbauswahldialog JColorChooser

Mit einem JColorChooser lassen sich Farben über drei unterschiedliche Reiter auswählen. Der Benutzer hat die Auswahl zwischen vordefinierten Farben, HSB-Werten und RGB-Werten. Um den Farbauswahldialog auf den Bildschirm zu bekommen, genügt ein Aufruf von JColorChooser.showDialog(Component, String, Color) mit drei Argumenten: einem Component-Objekt (dem Vater des Dialogs), dem Titel und einer Anfangsfarbe. Beendet der Benutzer den Dialog, wird als Rückgabewert die ausgewählte Farbe geliefert. Wird der Dialog abgebrochen, so ist der Rückgabewert null:

JFrame f = new JFrame();
 f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
 JButton b = new JButton( "Farbe ändern" );
 f.add( b );
 b.addActionListener( new ActionListener() {
   @Override public void actionPerformed( ActionEvent e ) {
    Component comp = (Component) e.getSource();
    Color newColor = JColorChooser.showDialog( null,
                                               "Wähle neue Farbe",
                                               comp.getBackground() );
    comp.setBackground( newColor );
  }
 } );
 f.pack();
 f.setVisible( true );

Den Aufruf mit showDialog(…) einzuleiten, ist nicht der einzige Weg. Wir können auch den Konstruktor nutzen und dieses Exemplar später mit JColorChooser.createDialog(…) übergeben und anzeigen.

class javax.swing.JColorChooser
extends JComponent implements Accessible

  • JColorChooser()
    Erzeugt einen neuen Farbauswahldialog.
  • JColorChooser(Colorc)
    Erzeugt einen neuen Farbauswahldialog mit einer vordefinierten Farbe.
  • staticColorshowDialog(Componentc,Stringtitle,ColorinitialColor)
    Zeigt einen modalen Farbauswahldialog.
  • staticJDialogcreateDialog(Componentc,Stringtitle,booleanmodal,
    JColorChooser chooserPane, ActionListener okLis, ActionListener cancelLis)
    Erzeugt einen neuen Dialog aufgrund des JColorChooser-Objekts mit Standardschaltflächen zum Bestätigen und Abbrechen.

JColorChooser-Objekte als spezielle Komponenten

Neben der statischen Methode showDialog(…) lässt sich auch der Konstruktor nutzen, um ein JColorChooser als spezielles JComponent-Objekt aufzubauen. Das bringt den Vorteil mit sich, dass die Farbauswahl nicht zwingend in einem eigenständigen Dialog stattfinden muss, sondern dass im Fall einer Komponente diese zusammen mit anderen Komponenten auf einen Container gesetzt werden kann. Änderungen an der Auswahl registriert ein ChangeListener, der etwa so angewendet wird:

chooser.getSelectionModel().addChangeListener( new ChangeListener() {
   @Override public void stateChanged( ChangeEvent e ) {
     Color c = ((ColorSelectionModel) e.getSource()).getSelectedColor();
   }
 } );

Weitere Beispiele finden sich unter http://www.java2s.com/Code/Java/Swing-JFC/Color-Chooser.htm. Wie ein neuer Reiter mit über 50 Schattierungen in der Graustufenanzeige eingebracht wird, zeigt etwa http://www.java2s.com/Code/Java/Swing-JFC/JColorChooserdialogwiththecustomGrayScalePanelpickertab.htm.

Inselraus: Undo unter Swing durchführen

Gute Benutzerschnittstellen zeichnen sich dadurch aus, dass dem Benutzer Fehler unterlaufen dürfen. Die Änderungen müssen jedoch wieder zurückgenommen werden können. Um dies in Java zu realisieren, gibt es Unterstützung durch ein Paket javax.swing.undo. Mit ihm lassen sich Undo- und Redo-Operationen mit relativ wenig Aufwand realisieren. Unser Beispiel soll ein Textfeld zeigen, dessen Änderungen auf Knopfdruck rückgängig gemacht werden. Zentrales Objekt ist dabei ein UndoManager. Dieser sammelt einzelne Aktionen, im Fall von Benutzereingaben jedes Zeichen. Die Anzahl der zu speichernden Aktionen ist beschränkt, lässt sich aber anpassen. Wir wollen in einem Beispiel ein JTextField mit einem Standardtext erzeugen. Anschließend wird ein UndoManager mit dem Document-Objekt des Textfeldes verbunden. Das Document informiert den UndoManager über Änderungen, der UndoManager speichert diese. Wenn eine Schaltfläche aktiviert ist, wird dem UndoManager befohlen, die Aktion rückgängig zu machen. Sichtbar wird dann wieder der Text, so wie er am Anfang in der Textbox stand:

package com.tutego.insel.ui.undo;
 
 import java.awt.BorderLayout;
 import java.awt.event.*;
 import javax.swing.*;
 import javax.swing.event.UndoableEditEvent;
 import javax.swing.undo.*;
 
 public class IComeUndone {
   public static void main( String[] args ) {
     JFrame f = new JFrame();
     f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
 
     final JTextArea textarea = new JTextArea( 20, 40 );
     textarea.setText( "Hier zurück" );
     f.add( new JScrollPane(textarea) );
 
     //    final UndoManager undomanager = new MyUndoManager();
     final UndoManager undomanager = new UndoManager();
     textarea.getDocument().addUndoableEditListener( undomanager );
     undomanager.setLimit( 1000 );
 
     JButton undoB = new JButton( "Undo" );
     undoB.addActionListener( new ActionListener() {
       @Override public void actionPerformed( ActionEvent e ) {
         undomanager.end();
 
         if ( undomanager.canUndo() )
           undomanager.undo();
         textarea.requestFocus();
       }
     } );
 
     f.add( undoB, BorderLayout.PAGE_END );
     f.pack();
     f.setVisible( true );
   }
 }

Um genauer zu sehen, was das UndoManager-Objekt rückgängig macht, schreiben wir eine Unterklasse von UndoManager und überschreiben die Methode undoableEditHappened(UndoableEdit-Event) (diese Methode implementiert UndoManager von der Schnittstelle UndoableEditListener). Geben wir in unserer Realisierung auf dem Bildschirm aus, was bei jeder Aktion in den UndoManager kommt:

class MyUndoManager extends UndoManager {
   @Override
   public void undoableEditHappened( UndoableEditEvent e ) {
     UndoableEdit ue = e.getEdit();
     System.out.println( ue );
     addEdit( ue );
   }
 }

Die Methode undoableEditHappened(UndoableEditEvent) bekommt ein Ereignisobjekt, in dem der Verweis auf eine zurücknehmbare Operation abgelegt ist. An diese kommen wir mit get-Edit(). Die Rückgabe ist ein UndoableEdit-Objekt, also genau eine Operation, die zu einem Undo und Redo fähig ist. Der UndoManager speichert diese mit dem Aufruf von addEdit() in einer Datenstruktur ab. Wenn wir das UndoableEdit-Objekt auf dem Bildschirm ausgeben, sehen wir unsere durchgeführte Operation, zum Beispiel bei einem Einfügen:

[javax.swing.text.GapContent$InsertUndo@497934 hasBeenDone: true alive: true]

Beim Löschen erkennen wir ein:

[javax.swing.text.GapContent$RemoveUndo@ca470 hasBeenDone: true alive: true]