Schlagwort: Java

Raspberry Pi – Digitaler Bilderrahmen mit Dropbox Anbindung

Hallo zusammen,
hier ist eine Software von mir, mit der man aus einem Raspberry Pi einem digitalen Bilderrahmen mit Dropbox Anbindung erstellen kann.
Folgende Funktionen bietet die Software:
  • Diashow mit verstellbarem Intervall
  • Bilder kommen direkt aus deiner Dropbox
  • Proxy Konfiguration möglich
  • Automatischer Fullscreen Modus
Die .jar Datei gibts hier zum Download:

Vorraussetzung:

  • Java 8
  • Ein Raspberry Pi mit Bildschirm / Monitor
  • Betriebssystem mit grafischer Oberfläche

Die ersten Schritte:

Erstelle in deinem Dropbox in der obersten Ebene einen Ordner der „cloudpictureframe“ heißt. (Ist in der .properties Datei anpassbar)
Lege test weise ein paar Bilder hinein.
Starte anschließend die .jar Datei wie folgt:
java -jar CloudPictureFrame.jar
Nun öffnet sich ein Fenster, welches dich auffordert, dich mit deim Dropbox Konto einzuloggen.
Falls sich nicht automatisch in deinem Webbrowser eine Dropbox URL öffnet gebe einfach den Link aus dem Fenster in einen Webbrowser ein.
Nachdem du dich im Webbrowser eingeloggt hast erhälst du einen Token Code.
Diesen musst du in das Feld „Autorisierungscode hier eingeben:“ einfügen.
Jetzt noch „Autorisieren“ drücken und schon gehts los.
Zu beginn kann es etwas dauern bis das erste Bild angezeigt wird, da erst alle Bilder synchronisiert werden müssen.
Hier ist beschrieben wie man das Programm in den Autostart bekommt:

Infos zur Konfiguration:

Direkt nach dem ersten start wird eine Konfigurationsdatei angelegt welche wie folge aussieht:
proxyEnabled=false</pre>
</div>
<div>proxyUrl=</div>
<div>proxyPort=</div>
<div>proxyUser=</div>
<div>proxyPassword=</div>
<div>dropBoxFolderName=cloudpictureframe</div>
<div>slideshowInterval=10000</div>
<div>dropBoxAuthToken=</div>
<div>
Der slideshowInterval ist in Millisekunden zu setzen also Achtung.
dropBoxAuthToken wird automatisch gesetzt.
dropBoxFolderName kann beliebig angepasst werden. (Muss in deinem Dropbox Ordner auf oberster Ebene vorhanden sein)

Raspberry-Pi – Java GUI Anwendung im Autostart

Logo der Raspberry-Pi-Stiftung

In diesem Beitrag möchte ich erklären wie man am Einfachsten eine Java Anwendung mit GUI beim Systemstart von einem Raspberry-Pi mit ausführt.
Als Betriebssystem habe ich Raspbian (Debian für den Raspberry-Pi) verwendet.

Wenn man weiß wie es geht, ist es schlussendlich sehr simpel. Folgendes muss getan werden:

  • Wechsle mit dem Befehl „cd ~/.config/autostart“ in das Autostart Verzeichnis von LXDE.
    Falls das Verzeichnis nicht existiert muss dies mit Hilfe des Befehls „mkdir“ angelegt werden.
  • Erstelle anschließend eine Datei „<DeinApp>.desktop“ (z.B.: notepad.desktop).
    Zum Erstellen der Datei kann folgender Befehl verwendet werden: „touch notepad.desktop“
  • Öffne dann die Datei in einem Texteditor deiner Wahl z.B.: „nano notepad.desktop“
  • Kopiere folgenden Text hinein und passe den Exec Pfad entsprechend deiner Software an:
[Desktop Entry]
Type=Application
Exec=java -jar /pfad/zu/deiner/software.jar
  • Zuletzt nicht vergessen die editierte Datei abzuspeichern. (Bei nano Speichern mit STRG+O, Schließen mit STRG+X)

Beim nächsten Neustart sollte nun die Software automatisch mit dem System starten.

disCoverJ – Anpassung der RAM Zuweisung

Hier möchte ich kurz erklären wie man meiner Software disCoverJ, mehr RAM zuweist.

Folgende Schritte sind dafür notwendig:

  1. Öffne den Ordner in dem disCoverJ installiert wurde, z.B. „C:\Program Files\disCoverJ“
  2. Öffne die Datei „disCoverJ.vmoptions“ mit einem Texteditor deiner Wahl
  3. Entferne die Raute(#) vor der Zeile „# -Xmx512m“
    Aus „# -Xmx512m“ wird somit “ -Xmx512m“
  4. Je nachdem wie viel Arbeitsspeicher dein Rechner hat, würde ich diesen Wert möglichst hoch setzten, wenn du viele Mp3s verarbeiten möchtest.

Achtung: Unter Umständen muss der Datei „disCoverJ.vmoptions“ unter Eigenschaften -> Sicherheit jedem Benutzer Änderungsrechte geben werden. Sonst kann die Datei nicht verändert werden.

Diese Einstellung erlaubt es disCoverJ 1GB Arbeitsspeicher zu verwenden.
Diese Einstellung erlaubt es disCoverJ 1GB Arbeitsspeicher zu verwenden.

Ein Anwendungsbeispiel:

Dein PC hat 8GB Arbeitsspeicher und du möchtest viele Lieder mit disCoverJ verarbeiten.
Leider bricht das Programm beim Laden oder Verarbeiten der Mp3s ab.
Wahrscheinlich ist zu wenig Arbeitsspeicher dem Programm zugewiesen.
Erkennen tust du das, an dem Balken rechts unten in disCoverJ.
Wenn dieser komplett voll ist wie auf diesem Bild:

2015

… dann solltest du die oben genannten Schritte durchführen.
In unserem Fall hat der Rechner 8GB Arbeitsspeicher, also können wir den Wert in der „disCoverJ.vmoptions“ auf “ -Xmx4096m“ einstellen.

Somit ist disCoverJ berechtigt 4GB deines Arbeitsspeicher zu verwenden.
Ob das ganze funktioniert hat, sieht man dann daran, wenn in disCoverJ rechts unten die rechte Zahl ungefähr dem eingestellten Wert in der „disCoverJ.vmoptions“ entspricht.

2015-01-12 12_37_29-C__Program Files_disCoverJ_disCoverJ.vmoptions - Notepad++
Hier sieht man den Vergleich zwischen dem hinterlegtem Wert und dem max. verfügbaren in disCoverJ

 

Java / JavaFX – Prüfen ob Mehrere Tasten gedrückt wurden

Hallo Zusammen,

hier ein kleines Snippet wie man ganz simpel in JavaFX prüfen kann ob mehrere Tasten gedrückt wurden:

 


//Welche Tasten sollen geprüft werden
KeyCodeCombination keyCodeCombination = new KeyCodeCombination(KeyCode.D, KeyCombination.CONTROL_ANY, KeyCombination.ALT_ANY);

//Hier die Aktion definieren welche nach zutreffen der Tastenkombination ausgeführt werden soll
KeyPressedListener keyPressedListener = () -> {
System.out.println("Du hast Strg+Alt+D gedrückt");
};

//In der ganzen Scene prüfen, alternativ kann die Prüfung auch nur auf einzelnen Layouts durchgeführt werden
scene.getAccelerators().put(keyCodeCombination, keyPressedListener);

remoteJux – Steuere deinen PC & Server mit deinem Smartphone

Hallo Leute,ic_launcher-web
in eigener Sache möchte ich euch mal mein kleines Projekt remoteJux vorstellen.

Was ist remoteJux?

Es handelt sich dabei um eine Server Software welche auf Java 8 basiert und einen Android App Client.

In dieser Kombination kann man Konsolen Befehle via Smartphone an den PC oder Server senden.
Somit kann man seinen gesamtes Server-System fernsteuern.

Natürlich alles OpenSource 😉

Woher bekomme ich es?

Die Android App gibt es im Google PlayStore
gplay_logo

Den dazugehörige Server kannst du auf BitBucket laden:
bitbucket logo

Falls du am Quellcode interessiert bist, den gibt es bei mir auf der BitBucket Seite:
https://bitbucket.org/rouven_h

Wie starte / konfiguriere ich den Server?

Server starten:
  • Java 8 installieren (DownloadLink)
  • Ausführen des Java Servers mit „java -jar remoteJuxServer.jar
Server konfigurieren (Nur bei Bedarf):
  • Beim ersten starten des Servers wird eine Datei erzeugt „remoteJux_server.properties
  • Diese Datei öffnen und Servername / Port beliebig anpassen (und merken)
  • Server neu starten, jetzt sollte in der Konsolenausgabe die neue Konfiguration ausgegeben werden

Wie konfiguriere ich die Android App?

  • Nach starten der App auf Einstellungen klicken
  • Falls eine abweichende Konfiguration erstellt wurde diese dort eintragen
  • Ansonsten die Standardwerte eintragen:
    Servername: IP oder DNS-Name des PCs/Servers auf dem der remoteJux Server läuft
    Port: 9998 (Standard)
Befehl konfigurieren:
  • Im Hauptfenster auf „+ Hinzufügen“ klicken.
  • Alle Werte ausfüllen, kurze Erklärung:
    Icon – Verschafft deinem Befehl einen visuellen Wiedererkennungswert (z.B. Einstellungs Symbol)
    Name – Der Alias für einen Befehl (z.B. Herunterfahren)
    Befehl – Der eigentliche Befehl welcher and den Server gesendet werden soll (z.B. sudo shutdown -h now)
    Gibt Text zurück – Bitte nur anhaken wenn der Befehl einen Rückgabewert hat z.B. ipconfig oder ifconfig
    Benutzereingabe erwartet: Funktion noch nicht entwickelt
  • Speichern klicken
  • Bei einem Klick auf den Pfeil auf der Rechten Seite wird der Befehl an den Server gesendet
  • Bei Bedarf kann auch auf dem Homescreen ein Widget für einen Befehl erstellt werden.
    So sind die Befehl noch schneller erreichbar 😉

Gibt es auch einen Desktop Anwendung als Client?

Ja die gibt es, diese ist aber noch nicht sehr ausgereift und befindet sich noch in der Entwicklungsphase.

Wer sie dennoch verwenden möchte kann sie bei BitBucket herunterladen:

bitbucket logo

JavaFX- Internationalisierung / i18n in FXML Dateien

Hallo zusammen,
in diesem Beitrag möchte ich euch erklären wie man i18n am Besten in JavaFX umsetzt.
Dies geht dank der Integration von i18n in SceneBuilder relativ einfach.
Alle Beispiele sind mit SceneBuilder 2.0 erstellt.

Erstellen einer Java Properties Datei

  • Erstelle eine Properies Datei: „myapp_de.properties“
  • Lege sie zum Beispiel in deinen Resources Ordner
  • Öffne die Datei in deiner IDE oder in einem Texteditor
  • Schreibe in die erste Zeile
    my.sample.key=Hallo Welt

 

Arbeiten mit i18n im JavaFX SceneBuilder

  • Öffnet / Erstellt eine .fxml Datei mit SceneBuilder
  • Klickt nun im SceneBuilder auf „Preview“ -> „Internationalization“ -> „Set Resource… “
    scene_builder_select
  • Wählt dort nun eure „myapp_de.properties“ Datei aus
  • Jetzt klickt auf ein Element welches Text enthält
  • Jetzt klickt auf der rechten Seite neben dem Text Feld auf das kleine Zahnrad.
    Dann auf „Replace with internationalized string“
    scene_builder_tokey
  • Nun wird das Textfeld automatisch in ein Key Feld umgewandelt
  • Dort kommt jetzt der Key aus der Properties Datei rein („my.sample.key“)
  • Nach verlassen des Feldes sollte der SceneBuilder automatisch den Wert aus der Properties Datei ziehen, sprich „Hallo Welt“
  • Die FXML abspeichern

 

Sprache beim Laden einer FXML Datei festlegen

  • Nun geht es im Quellcode um das Laden einer FXML mit einer bestimmten Sprache.
  • Das sieht nun folgendermaßen aus:

 ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

 URL fxmlURL = classLoader.getResource("fxmls/myview.fxml");
 InputStream inputStream = classLoader.getResource("bundles/myapp_de.properties").openStream();
 ResourceBundle bundle = new PropertyResourceBundle(inputStream);

 FXMLLoader loader = new FXMLLoader(fxmlURL, bundle);
 Parent p = loader.load();

 Stage stage = new Stage();
 stage.setScene(new Scene(p));
 stage.show();

  • Ich gehe davon von aus das die .fxml Dateien und die .properties Dateien in einem resources Ordner liegen.
    Die Struktur sieht folgendermaßen aus:

java.de.app
………..|——-Main.java

<resources>
………..|——-bundles
………………….|————–myapp_de.properties
………………….|————–myapp_en.properties
………..|——-fxmls
………………….|————–myview.fxml

 

Es ist zu beachten das die Sprache nicht währen des Betriebs geändert werden kann. Das bedeutet des die Stage neu gestartet werden muss damit eine Sprachänderung wirksam wird.

 

Download
Beispielprojekt: i18nTest.zip (3KB)

 

Java 8 – Listener über Lambda Expression

Hallo,
hier ein Snippet wie man einen Listener mit Lambda Expression hinzufügt.

        field.addListener(
            (Property.ValueChangeListener) (valueChangeEvent) -> onVoucherTypeFieldCreated(field));

Der gleiche sah in in Java 7 noch so aus:

        field.addListener(new Property.ValueChangeListener()
                          {
                              @Override
                              public void valueChange(Property.ValueChangeEvent valueChangeEvent)
                              {
                                  onVoucherTypeChanged(cmb.getValue());
                              }
                          }
        );

Java Development Kit 8 (Java 8) – Liste mithilfe von Lambda Expression filtern

Hallo Leute,
seit gestern ist Java 8 draußen.
Eine der größten Neuerungen ist der Einzug von Lambdas ins neue JDK.

Hier mal ein kleines Snippet wie man mithilfe von Java 8 Lambda Expressions eine Liste filtert.

        List<String> someColors = new ArrayList<>();
        someColors.add("Blau");
        someColors.add("Rot");
        someColors.add("Grün");
        someColors.add("Grau");

        List<String> filteredList =
            someColors.stream().filter(color -> color.endsWith("au")).collect(Collectors.toList());
        //returns Blau & Grau

Java / Vaadin – Erstellen einer vertikalen Trennlinie mit Hilfe von HTML

Hallo Leute,

hier mal ein kleines Snippet wie man mit Hilfe des <hr> Tags in Vaadin (und HTML) eine vertikale Trennline erstellen kann.

Habe mir folgende Methode zusammen gebaut:


    public static Component createVerticalLine(int height)
    {
        String html = "<hr noshade style=\"background-color: black; height: " + height + "px; width: 1px;\">";
        Label label = new Label(html, Label.CONTENT_XHTML);
        return label;
    }

SQuirreL – Alle deine Datenbanken in einem universellen SQL-Editor zusammengefasst

Hallo Leute,

heute möchte ich euch das in Java geschriebenen Programm SQuirreL SQL vorstellen.

SQuirreL SQL ist ein quelloffener SQL-Editor welcher die Möglichkeit bietet alle Datenbanken, welche eine JDBC Library mit sich bringen, zu verwalten.

Von Haus aus sind schon viele gängigen Datenbanken mit Treiber hinterlegt. (MySql, Oracle, PosgreSQL, … )

Des weiteren bietet das Tool viele nützliche Funktionen:

  • Verwaltung von beliebig vielen Datenbanken (Strukturierung mit Ordnern möglich)
  • SQL Formatierung / Highlighting
  • Anzeigen von Tabellen Verbindungen (Constraints) in einem Graphen
  • Code completion
  • INNER JOIN Generierung (Syntax: #i,Haus,Fenster,Tuer,)
  • Automatische Generierung von SQLs. Bsp.: SQL to Insert (Hier wird ein SELECT zu einem Insert-Statement umgewandelt)
  • Live Editierung der Daten in einem Result-Table
  • Festlegen von Shortcuts. Bsp.: SF –> SELECT * FROM; OBI –> ORDER BY ID
  • Unterstützung für Hibernate, HQL
  • … Und vieles Mehr

SQuirreL benötigt eine Java Runtime.

Weitere Informationen gibt es auf der Projekt Homepage