JavaFX JavaFX Probleme bei der Anzeige von Text

JavaSchlumpf

Mitglied
Hallo Community,

ich habe ein Problem bei der Anzeige von Schriften in einer JavaFX-GUI. Und zwar haben alle Buchstaben -ich nenne es- "Pixelfehler". Zum leichteren Verständnis habe ich einen Screenshot angehängt. (Ist nur ein Teil des Programms, da ich den Rest nicht zeigen kann)

Bildschirmfoto vom 2014-09-27 14:46:44.png

Ich benutze Ubuntu 14.04 in der aktuellsten Version und Java 8 Update 20.
java -version:
Code:
java version "1.8.0_20"Java(TM)
SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

Ich vermute, dass es an Ubuntu liegt, denn unter Windows 7 mit der gleichen Javaversion funktioniert alles einwandfrei.

Meine Frage ist also, ob jemand eine Lösung für dieses Problem parat hat.

Vielen Dank im Vorraus
JavaSchlumpf
 
1) Meine Augen sind wohl wirklich nicht mehr die Besten. Trotz Brille kann ich gerade nicht erkennen, wo genau das Problem ist.

2) So weit ich weiss, gab es einmal Probleme bei der Darstellung von Schriften. Aber das war in den frühen Zeiten (JavaFX 2.1) dachte ich. Ich hätte angenommen, dass ist schon behoben. Leg dir vielleicht auf dem offiziellen Jira (Bugtracker und mehr) von JavaFX mal einen Account an und schau mal, was du da findest, oder öffne ein Ticket: JavaFX Jira
 
Hallo dzim,

danke für deine schnelle Hilfe.

Zu 1)
Ich habe noch ein anderes Bild (vergrößert, Ausschnitt) und dies ein bisschen bearbeitet, damit man die Fehler besser erkennen kann🙂

Original:
Anhang anzeigen 6883

Bearbeitet:
Anhang anzeigen 6884

Zu 2)
Hast du noch in Erinnerung, ob es sich dabei um ein "Ubuntuproblem" handelt?

Viele Grüße
JavaSchlumpf
 
Ah I see... Ich weiss es leider nicht mehr genau. Ist schon recht lange her...
Einer der wenigen alten Links ist von Kai Toedter - Simens-Typ, hat (früher?) viel am Eclipse-Projekt mitgemacht:
JavaFX 2.1 Beta: Improved Font Rendering
Aber da ging es eher um schwammiges Aussehen, als die Chromatischen Abberationen (so nennt man das doch, oder?).
Wenn es möglich ist, probiere die Anwendung mal wirklich auf einem anderen System aus (Win, OSX)...
Aber ich hab noch den Link hier gefunden: Can the rendering of the JavaFX 2/8 font be improved? - Stack Overflow
Schau vielleicht mal, was der Link zum Jira dazu sagt... Ob das Behoben wurde.
 
Ich habe mir nun einen Account auf dem Jira angelegt und mir das ganze mal durchgelesen. Der Bug beschreibt zu 100% mein Problem. Allerdings wurde dieser mit der Version "Lombard" gefixt. Mit der Version 8u20 sind wir inzwischen mehrere Versionen weiter.

Was mir noch aufgefallen ist, dass der Fehler nach dem Update auf 8u20 aufgetreten ist.

...probiere die Anwendung mal wirklich auf einem anderen System aus (Win, OSX)...
Hab ich bereits 🙂 :
...unter Windows 7 mit der gleichen Javaversion funktioniert alles einwandfrei

Auch ist Auffällig, dass nur meine selbstgeschriebenen Programme von dem Fehler betroffen sind. Der JavaFX SceneBuilder (der -soweit es mir bekannt ist- auch unter Java läuft) in der Version 2.0 ist nicht ganz so auffällig betroffen. Zumindest sehe ich nur ein paar Artefakte, wenn ich mit dem Auge ca. 10 cm vom Bildschirm entfernt bin.

Screenshot:
Bildschirmfoto vom 2014-09-28 12:05:24.png

Ich werde, wenn es keine weiteren Lösungsvorschläge gibt, das nächste Update abwarten, was hoffentlich in Bälde folgen wird. Dann werde ich natürlich auch berichten, ob sich etwas geändert hat.
 
Oh. Sorry, dass ich das im ersten Post überlesen hab... :-/

Was noch sein könnte: Wie kompilierst du es? Vielleicht für eine ältere Version? Java7 vielleicht?
Mir sind in dem Zusammenhang auch schon mal alte Fehler vor die Füsse gefallen.

Dann noch eine weitere Idee (vielleicht hängt die von der Frage zuvor ab): Welchen Font verwendest du im CSS? Vielleicht liegt hier auch das Problem.

Nur so ein paar Ideen...
 
Danke für die weiteren Ideen. Hab ich direkt ausprobiert.

Mit dem Kompilieren müsstest du mir weiterhelfen, wo ich diese Einstellung bei NetBeans 8.0.1 finde. Ich habe ein bisschen gesucht und auch zwei Einstellungsmöglichkeiten gefunden. Allerdings standen beide auf JDK 8 bzw Java 8.

Zur Schriftart. Meistens verwende ich die Schriftart "System", also die Standard Systemschriftart. Auch habe ich jetzt eine typische Linuxschriftart (Die Schriftart "Ubuntu") und eine typische Windowsschriftart genommen, die bei mir installiert ist (Arial -die wohl typischste, die es gibt- 🙂 ). Bei allen dreien tritt der Fehler auf.

Noch auffällig:
Im "Baukasten" des SceneBuilders sowie in dessen Vorschau (Ctrl + P) ist die Schrift fehlerfrei.
 
Mit NetBeans kenne ich mich nicht aus. Eclipse-Nutzer. Sorry.
Läuft SceneBuilder mit der installierten VM oder nutzt es was gebundeltes?
Ich vermute einfach, das beim Ausführen des Programms (auch in NetBeans???) eben die falsche VM oder eine falsche Version verwendet wird.
Also vielleicht liegt es ja wirklich nur an der VM, auf der es ausgeführt, wenn du mehrere auf dem System hast.
 
Hallo,

ich habe nachgesehen, ob der SceneBuilder eine eigene VM mitbringt. Tut er. Als ich den "runtime" Ordner umbenannt habe, sodass der SceneBuilder ihn nicht mehr erkennt, startete Letzterer nicht mehr. Also wird für den SceneBuilder eine andere VM genutzt als für das Ausführen des Projekts.

Außerdem habe ich nur eine Java-VM installiert. Somit kann keine falsche VM verwendet werden (Ich hoffe, dass ich dich in diesem Punkt richtig verstanden habe). Es kann natürlich ein Fehler in der Javaversion vorliegen.

Somit werde ich, wie im vorletzten Post von mir gesagt, das nächste Update abwarten.
 
Du bist unter Ubuntu, nicht war? Kannst du mir mal spassenshalber einen Code einer Main-Klasse hier posten, die bereits dein Problem erzeugt?
Ich nutze auch Ubuntu und habe mir Oracles Java (7 und 8) über das PPA von Webupd8 installiert. (Wobei alle defaults auf 8 zeigen.)
Mir ist es bisher noch nicht negativ aufgefallen... (Aber mein Laptop ist auch so hochauflösend, das ich es mit der Brille nie sorecht sehe, würde dann mal wie du einen Screenshot machen und vergrössern 🙂 )
 
Den Code einer Main-Klasse? Ich habe mindestens drei Dateien. Aber Egal. Damit es nicht zu viel Code wird, habe ich einfach das Beispielprojekt genommen, das NetBeans automatisch erstellt, wenn man ein neues Projekt öffnet. Daher hier die drei Dateien:


Java:
// #################################################
// JavaFXApplication.java
// #################################################
package javafxapplication;


import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


/**
 *
 * @author jan
 */
public class JavaFXApplication extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Main.fxml"));
        
        Scene scene = new Scene(root);
        
        stage.setScene(scene);
        stage.show();
    }


    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}

HTML:
<!--
Main.fxml
-->
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1"
    fx:controller="javafxapplication.MainController">
      <children>
            <Button layoutX="126" layoutY="90" text="Click Me!" onAction="#handleButtonAction" fx:id="button" />
            <Label layoutX="126" layoutY="120" minHeight="16" minWidth="69" fx:id="label" />
      </children>
</AnchorPane>

An dieser Stelle -falls ein Admin dies liest- vielleicht die Idee, dass man in Zeiten von (F)XML mal einen BB-Code für dieses "erfindet". Habe jetzt
HTML:
 genommen.

[code=Java]// #################################################
// MainController.java
// #################################################
package javafxapplication;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;


/**
 *
 * @author jan
 */
public class MainController implements Initializable {
    
    @FXML
    private Label label;
    
    @FXML
    private void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        label.setText("Hello World!");
    }
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    
    
}
[/code]

Damit es noch einfacher ist, hier der Link zur fertigen .jar:
[url=http://www.mediafire.com/download/gdk93x2p0cg2939/JavaFXApplication.jar]JavaFXApplication[/url]

Im übrigen habe ich das gleiche Java installiert, wie du.
 
Hm. Ich hab es jetzt auf der ersten Ubutu-Maschiene probiert. Ich finde die Schrift nicht so klar (Brillenproblem), aber solche Farbabweichungen wie du konnte ich nicht feststellen. Ich teste es morgen noch mal auf dem Laptop (keine Lust mehr, jetzt) und geb dir dann bescheid. Wenn du auch beide Javas vom PPA installiert hast, worauf zeigt denn dein default? Was gibt "java -version" auf der Konsole aus?
 
Ich habe nur ein Java(8) installiert.

Code:
java -version

java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

Noch eine Bitte: Wenn du das Programm testest, dann vllt. einmal mit der von mir kompilierten .jar und mit dem Quellcode, den ich gepostet habe (= selber kompilieren). Möglicherweise gibt es dabei ja Unterschiede.
 
Zuletzt bearbeitet:
Beides mal probiert und bei beiden keine sinifikanteren Probleme, ausser dem besagtem Unschärfeproblem (was wie gesagt an meinen Augen liegen könnte).
 
Hallo zusammen,

nach lange Pause und langem Warten auf ein Update von Java 8 hat sich immer noch nichts getan (inzwischen sind wir bei Version 1.8.0_31 gelandet). Da ich jetzt aber unbedingt dieses Problem lösen wollte, habe ich mich noch einmal auf die Suche gemacht und bin tatsächlich fündig geworden:

Can the rendering of the JavaFX 2/8 font be improved? - Stack Overflow (an dieser Stelle: dzim, das ist genau der gleiche Link, den Du in Posting #5 gepostet hast. Die -am 30.01.2015 einzige- Antwort wurde allerdings ca. einen Monat später verfasst. Hattest also den richtigen Riecher 🙂)

Wie dort erklärt, habe ich den Code
Java:
System.setProperty("prism.lcdtext", "false");
System.setProperty("prism.text", "t2k");
an einer (vermutlich beliebigen) Stelle in mein Projekt eingefügt. "Vermutlich beliebig" heißt einmal in der Methode, die für die Initialisierung eines FXMLs zuständig ist (Controller-Class)
Java:
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
    System.setProperty("prism.lcdtext", "false");
    System.setProperty("prism.text", "t2k");
    // ...
}
und einmal in der Methode, die das Fenster erstellt.
Java:
// ...
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        System.setProperty("prism.lcdtext", "false");
        System.setProperty("prism.text", "t2k");
        
        launch(args);
    }

Bei beiden Versionen hat es tadellos funktioniert. Man kann ein bisschen mit den Werten spielen und z. B. eine der beiden Codezeilen weglassen oder "false" auf "true" setzen.

Weiterhin habe ich gelesen, dass ich nicht der einzige mit Problemen bei der Schriftartdarstellung bin. Deshalb hoffe ich, dass diese beiden Zeilen irgendwann überflüssig werden.

Soweit bin ich also zufrieden mit der Lösung, da Sie sich, soweit ich weiß, -einmal aufgerufen- auf das ganze Programm auswirkt. Also keine schlechte Lösung (finde ich 🙂).

Gruß JavaSchlumpf
 
Zuletzt bearbeitet:
Früher gab es einmal so einen "Erledigt" Button links über dem ersten oder unter dem letzten Post... Aber ich hab schon eine ganze Weile keinen eigenen Thread mehr eröffnet (März '14), also kA.
 

Neue Themen


Zurück
Oben