Node.js: Fehlersuche bei npm install

Posted: September 19th, 2014 | Filed under: Java, JavaScript, PHP, Programmieren | Tags: , , , , , , , | No Comments »

image

Manchmal kann es vorkommen, dass beim Installationsprozess eines gewünschten Modules Fehler, wie die eingeschränkte Erreichbarkeit eines TAR-Archives, auftreten. Mit Hilfe des folgenden Befehles, welcher auf der Konsole eingegeben werden muss, ist es möglich die Debug-Ausgabe für den Paketmanager NPM und für den Befehl npm install {{modul}} zu aktivieren.

npm config set loglevel info

Somit lassen sich eventuelle Probleme erkennen und gegebenenfalls beseitigen.

image


JavaFX: Progress-Bar CSS Styling

Posted: Mai 29th, 2014 | Filed under: Java | Tags: , , , , , , | 2 Comments »

In my opinion the JavaFX CSS Reference Guide is not well elaborated. With the help of screenshots and concrete examples it would be much easier to understand the explanations. Therefore I started https://github.com/frankred/JavaFX-Tutorials to give you some examples for specific components.

In the following post the progress-bar component is introduced.

Progress-Bar Tutorial

.progress-bar {
    -fx-background-color: yellow;
    -fx-background-radius: 10, 10, 10, 10;

}

.progress-bar .track{
    -fx-background-color: green;
    -fx-background-insets: 20;
    -fx-background-radius: 6, 6, 6, 6;
}

.progress-bar .bar { 
    -fx-background-color: grey;
    -fx-background-insets: 30, 30, 30, 30; 
    -fx-background-radius: 4, 4, 4, 4;
}

Feel free to copy and paste everything!


Gastbeitrag: Swing Komponenten in JavaFX 8 verwenden

Posted: Mai 16th, 2014 | Filed under: Java, Programmieren, Tutorials | Tags: , , , , | No Comments »

Seit der aktuellen Version von JavaFX 8 ist es möglich Swing Komponenten in JavaFX Anwendungen einzubinden. Umgekehrt war es schon seit JavaFX 2.0 möglich JavaFX UI-Elemente in eine Swing Anwendung einzubinden. In diesem Beitrag möchte ich anhand einem Beispiel zeigen, wie man einen JButton in den JavaFX Scene Graph einbindet und wie man mit Hilfe des entsprechenden Events, welche vom Button ausgelöst werden, Zugriff die JavaFX Umgebung erhält.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.embed.swing.SwingNode;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class SwingInJavaFX extends Application {

  // JavaFX Komponenten
  private StackPane stackPane = new StackPane();
  private final SwingNode swingNode = new SwingNode();
  
  @Override
  public void start(Stage stagethrows Exception {
    // Swing Code muss im AWT event dispatching thread ausgeführt werden. Dafür
    // wird die Methode SwingUtilities.invokeLater(Runnable) verwendet.
    SwingUtilities.invokeLater(new Runnable() {
  
      @Override
      public void run() {
        // Ab hier läuft der Code im AWT event dispatching thread.
        // => Zugriff auf die Swing Elemente möglich!
        JButton swingButton = new JButton("Toggle Color");
        swingButton.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
  
            // Um auf die JavaFX Elemente zugreifen zu können, muss man
            // die Methode Platform.runLater(Runnable) nutzen, damit der 
            // Code wieder im JavaFX application thread ausgeführt  wird.
            Platform.runLater(new Runnable() {
              @Override
              public void run() {
                // Ab hier läuft der Code im JavaFX application thread
                // => Zugriff auf die JavaFX Elemente möglich!
                stackPane.getChildren().add(new SwingNode());
                SwingInJavaFX.this.stackPane.setStyle("-fx-background-color: #ffff00;");
              }
            });
          }
        });
        // Füge den Swing Button zum JavaFX Swing Node hinzu
        swingNode.setContent(swingButton);
      }
    });
    // Füge dem StackPane den Swing Node hinzu.
    stackPane.getChildren().add(swingNode);
  
    // Richte die Stage ein.
    stage.setTitle("Swing Komponenten in JavaFX 8 verwenden");
    stage.setScene(new Scene(stackPane, 200200));
    stage.show();
  }
  
    public static void main(String[] args) {
       // JavaFX Anwendung starten
        launch(args);
    }
}

Markus Mangei


jSona: Simple JavaFX based music player

Posted: April 1st, 2014 | Filed under: Allgemein, Java, Programmieren | Tags: , , , , , , | 2 Comments »

Hey, today I want you to introduce my new project that is called jSona. It is based on JavaFX, Apache Lucene and vlcj. I developed jSona because I found no music player that keeps in synch with my music folders and fits my needs. Because I just launched this project it has not that many features:

  • Supports all common media formats that VLC supports
  • Load artist information and images via last.fm and MusicBrainz
  • Include your music folders
  • Create multiple playlists
  • Fulltext search

I tried to make a good looking, simple to use and clean user interface. All artist information like an image, the vita or the top tracks is loaded via the great Last.fm API. If you click on the top tracks then YouTube will be opened with a correspondent search query. The heart of the music player is a JSON-based configuration file where I will try to keep everything configurable, so that jSona also fits your needs.

68747470733a2f2f646c2e64726f70626f7875736572636f6e74656e742e636f6d2f752f333636393635382f6769746875622f6a536f6e612f6a736f6e615f75695f312e302e332e706e67

It would be great if someone want to join me in development. Here you can download a current version of jSona, https://github.com/frankred/jSona.


Java: JSON als Konfigurationsdatei / properties.ini Alternative

Posted: Januar 18th, 2014 | Filed under: Java, Programmieren, Software, Tutorials | Tags: , , , , , , | No Comments »

imageIn meiner langjährigen Programmiererfahrung hatte ich schon öfters die Ehre mit sogenannten .ini- bzw. Property-Dateien zu arbeiten. Ich muss sagen, wirklich zufrieden war ich damit nie. Oft gab es Probleme mit der Identifikation von boolean Werten. Auch das behandeln von Listen in der jeweiligen Property-Datei war stets ein Sonderfall und handelte mir manchmal Schwierigkeiten ein. Ich glaube nicht mal das meine Abneigung an den prinzipiellen Aufbau und Grundgedanken einer .ini-Dateie gerichtet ist, vielmehr stören mich die mangelhaften Implementierungen der jeweiligen Programmiersprachen.

In folgendem Artikel möchte ich euch meine Implementierung einer Konfigurationsdatei auf Basis von JSON vorstellen. Diese verwendet die Bibliothek GSON und wird für folgende Implementierung benötigt. Wie ihr die Bibliothek in euer Projekt einbinden könnt erfahrt ihr hier nachlasen.

Die Klasse Config.java verwendet den Singleton-Mechanismus. Vorteil: Ihr müsst die Konfigurationsdatei nur einmal laden und erhält im Anschluss darauf Zugriff auf die jeweiligen Attribute innerhalb jeder anderen Klasse in eurer Applikation.

Config.java

package de.roth.json.config;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Config {

    // Hier schreibst du deine Attribute hin
    public String TITLE;
    public int WIDTH;
    public int HEIGHT;
    public double RATIO;
    public ArrayList<String> NAMES;

    public Config() {
        // Hier die Standardwerte der Attribute, falls diese
        // nicht in der Konfigurationsdatei
vorhanden sind. 
          
this.TITLE = "Titel der Anwendung";
        this.WIDTH = 800;
        this.HEIGHT = 600;
        this.RATIO = 0.6;
        this.NAMES = new ArrayList<String>();
        this.NAMES.add("Peter");
        this.NAMES.add("Paul");
    }

    // DON'T TOUCH THE FOLLOWING CODE
    private static Config instance;

    public static Config getInstance() {
        if (instance == null) {
            instance = fromDefaults();
        }
        return instance;
    }

    public static void load(File file) {
        instance = fromFile(file);

        // no config file found
        if (instance == null) {
            instance = fromDefaults();
        }
    }

    public static void load(String file) {
        load(new File(file));
    }

    private static Config fromDefaults() {
        Config config = new Config();
        return config;
    }

    public void toFile(String file) {
        toFile(new File(file));
    }

    public void toFile(File file) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String jsonConfig = gson.toJson(this);
        FileWriter writer;
        try {
            writer = new FileWriter(file);
            writer.write(jsonConfig);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static Config fromFile(File configFile) {
        try {
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(configFile)));
            return gson.fromJson(reader, Config.class);
        } catch (FileNotFoundException e) {
            return null;
        }
    }

    @Override
    public String toString() {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        return gson.toJson(this);
    }
}

Die Verwendung dieser Klasse ist sehr einfach. Schaut selbst:

Test.java

package de.roth.json.config;

public class Test {

    public static void main(String[] args) {
        // Konfigurationsdatei laden, falls vorhanden.
        // Ansonsten werden die Werte im Konstruktor verwendet
        Config.load("config.json");

        // Zugriff auf Attribut
        Config.getInstance().TITLE = "Neuer Titel";
        Config.getInstance().RATIO = 0.4;
        for (String s : Config.getInstance().NAMES) {
            System.out.println(s);
        }

        // Speichern der Konfigurationsdatei
        Config.getInstance().toFile("config.json");
    }
}

Da in unserem Beispiel noch keine Konfigurationsdatei vorhanden war ergibt sich nach dem ändern und sichern der Konfiguration folgende JSON-Datei.

{
  "TITLE": "Neuer Titel",
  "WIDTH": 800,
  "HEIGHT": 600,
  "RATIO": 0.4,
  "NAMES": [
    "Peter",
    "Paul"
  ]
}

Mit Hilfe dieser Implementierung und GSON ist es natürlich auch möglich vollständige Objekte als Konfigurationsattribut abzulegen. GSON löst automatisch jedes Objekt in primitive Datenstrukturen auf und speichert es im Anschluss darauf als JSON-Objekt in der Konfigurationsdatei ab.

GitHub

Den Quellcode zu dem Projekt könnt ihr euch auch auf GitHub ansehen:

https://github.com/frankred/json-config-file

Download

Das ganze Beispiel könnt ihr euch zusätzlich hier als vollständiges Eclipse-Projekt herunterladen.


Pages: 1 2 3 4 5 Nächste Seite