Swing Schrift sehr klein Ubuntu/eclipse

Saylles

Mitglied
Hi wie auf dem Bild zu sehen ist sind die Fenster sehr klein bzw. die Schrift.
Wie stelle ich das an das hier der Standard benutzt wird, ich nutze als System Ubuntu.
 

Anhänge

  • Bildschirmfoto von 2020-10-04 15-34-03.png
    Bildschirmfoto von 2020-10-04 15-34-03.png
    555,6 KB · Aufrufe: 72
Das Problem ist das Font Scaling. Ich nehme mal an, hier wird ein 4k-Bildschirm oder so verwendet. Ich glaube Java hat unter Linux da mitunter immer noch etwas Probleme, das Font Scaling des Systems zu erkennen.

Welches Java und JavaFX verwendest du?

#edit: Kein JavaFX, sondern Swing. Sorry. Aber ich hatte mal gelesen, dass es ab einer bestimmten Version dann besser werden sollte. Ich recherchier noch mal.
 
Auch wenn das JavaFX-spezifisch zu sein scheint, glaube ich aber, dass das hier auch für Swing gelten *könnte*...



Im folgenden wird auf den Scaling-Factor eingegangen und wie man ihn holen könnte. Auch für AWT/Swing. Aber i.d.R. immer nur für Windows...


Hier wird auch nochmal GDK_SCALE=2 verwendet, um manuell die Environment Variable zu setzen.
Find ich aber doof, da man dann im Vorfeld wissen muss, wie man wo scalen muss. Blöd, wenn man die App dann anderen geben möchte.
In dem Post verlinkt:
https://wiki.archlinux.org/index.php/HiDPI#Java_applications - ist zwar von Arch Linux, sollte aber auch für Ubuntu gelten.
 
Leider auf den ersten Blick nichts brauchbares dabei.
Auf meinem Win PC ist das Problem nicht von daher wird es ja an dem Linux bzw. an dem Java Linux liegen.
Im übrigen ist auch das AWT betroffen.
 
Klar. AWT/Swing wird im wesentlichen wie eine Mischpoke behandelt. Aus reiner Neugier: Passiert das mit JavaFX auch?

In Maven/Gradle die Dependencies auf JavaFX hinzufügen
https://openjfx.io/openjfx-docs/#maven / https://openjfx.io/openjfx-docs/#gradle
(JavaFX 15 ist aktuell und ist kompatibel zurück bis auf Java 11, kann also mit deinem installierten Java 14 auch verwendet werden.)

Oder Bell-Soft JDK in der Variante "Full" installieren, da ist JavaFX drin enthalten.

Java:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class MainWindow extends Application
{
    public static void main(
        final String... args)
    {
        launch(args);
    }
    
    @Override
    public void start(
        final Stage primaryStage)
    {
        final VBox root = new VBox(10);
        root.getChildren().addAll(new Button("Button"), new TextField(), new Label("Label"));
        
        final Scene scene = new Scene(root, 600, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
 
Hast Du denn auch mal ausprobiert, die Settings laden zu lassen, wie es in dem Link beschrieben ist.

Also einfach in main vorab den folgenden Code einfügen:
Java:
try {
  UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
} catch( Exception e ) { e.printStackTrace(); }

Hintergrund ist, dass Java von sich aus mit eigenen Einstellungen daher kommt. Man kann über den UI Manager einiges setzen: Schriftarten, deren Größe u.s.w. Und es gibt eine Methodik, die eben versucht, die Settings aus dem System zu laden.

Ich habe so ein Problem auf meinem Ubuntu System nicht nachstellen können, aber den Unterschied kann ich aufzeigen:

WithAndWithoutUIManager.png

Es wird also deutlich: Es wird die Schriftart und Größe des Systems verwendet. Das wird auch noch deutlicher, wenn man Settings wie "Große Schrift" oder so aktiviert.

Daher wäre es aus meiner Sicht auf jeden Fall einen Versuch wert, dies einmal zu probieren.
 
Das ist etwas dubios. Gibt es irgend welche Fehlermeldungen auf der Console?

Ich kenne es so, dass er ggf. auf der Console noch Fehlermeldungen ausgibt, wenn etwas nicht stimmt. Also z.B. das ein Modul nicht geladen werden kann....

Ich habe mir extra für diesen Thread ein frisches Ubuntu aufgesetzt in einer VM. Letzte Patche installiert. Dann habe ich das openjdk 14 installiert aber auch das aktuelle JDK 14 von Oracle habe ich herunter geladen (deb geladen und installiert).

Bei mir funktioniert beides problemlos, also sowohl Aufruf über openjdk als auch mit Oracle Java ...

Edit: Es fehlte ihm das cranberry-gtk-module, daher gab es auch ein "sudo apt install libcanberra-gtk-module libcanberra-gtk3-module", aber das war für die Funktionalität nicht zwingend notwendig. Der Auszug vom Bildschirm entstand noch ohne dieses Modul.

Und dann auch eben genaue Versionen:
-> Ubuntu-20.04.1 habe ich installiert
-> Von Oracle: jdk-14.0.2_linux-x64_bin.deb (installation mit "sudo dpkg -i ...")
-> Openjdk installiert mit sudo apt-get install openjdk-14-jdk-headless (Ist damit auch im Pfad).

Aufrufe waren einfach
- java Test.java (openjdk Aufruf)
- /usr/lib/jvm/jdk-14.0.0/bin/java Test.java (Oracle JDK Aufruf)
 
Zuletzt bearbeitet von einem Moderator:
Lässt sich bei mir auch nicht reproduzieren. Ich habe ebenfalls mir ein VM system eingerichtet und dort funktionierte es auf Anhieb.
Bekomme langsam die Befürchtung das es am Laptop liegen könnte bzw. am kernel von Linux die ein kleines Problem mit dem CPU hat bzw. APU.
Ubuntu lief bis zur 2020.09 Version nicht auf dem Laptop (AMD APU -.-).
Wäre das vorstellbar ?
 
Also mich wundert etwas, dass Eclipse und co keine Probleme haben. Klar - Eclipse nutzt nicht awt/Swing sondern SWT, aber unter dem Strich läuft doch sehr viel immer auf die gleichen Schnittstellen hinaus.
Und die Anzeige selbst scheint zu klappen - daher frage ich mich, wo hier das Problem liegen könnte. Im Console Fenster von Eclipse kommt keine weitere Ausgabe?

Im Augenblick habe ich aber auch kein Ansatz, wie man das jetzt weiter verfolgen könnte. Ich würde ggf. einmal ein Live System starten um es dann auf dem Live System zu probieren. Evtl. ist irgend etwas an der Konfiguration zerhauen? Oder es gibt ein Problem mit Ubuntu / Unity?

Als ich noch mit Linux unterwegs war (schon paar Monate her - jetzt arbeite ich auch auf Win 10 und habe nur noch WSL2 Systeme zusätzlich aufgesetzt), war eine meiner Aktivitäten das Austesten diverser Distributionen. Da wurde eigentliches jedes WE eines meiner Systeme neu aufgesetzt - dank vernünftiger Synchronisation der Daten war das immer eine schnelle und unkomplizierte Sache ... gerade bei problematischer Hardware habe ich immer mehrere Distributionen im Detail ausgetestet. (Auf dem MacBook Air 11" von 2014 war dann Debian am Ende immer das Beste. Da war zwar vieles händisch einzurichten / anzupassen, aber Ubuntu, openSuSE und einige Exoten, die ich probiert habe, hatten dann in einzelnen Punkten immer wieder Probleme, die dann auch manuell schwer zu beheben waren - und ich nur ein kurzes Zeitfenster für die Konfiguration vorgesehen hatte!) Das wird aber für Dich weniger interessant sein, es sei denn, Linux wäre für Dich auch zusätzlich eine nette Spielerei ... Daher bringe ich das nicht wirklich als Alternative.

Bezüglich AMD APU und so habe ich keinerlei Erfahrungen. Daher kann ich da leider keine konkreten Tipps / Hinweise geben.
 
Ja, das ist problemlos gegangen. Das hatte mich auch zuerst gewundert, aber das war halt das JDK 14 Paket, das er mir bei Eingabe von javac angeboten hatte ... Und bei der Test VM war ich erst einmal zu faul zu schauen, ob es ein openjdk-14-jdk geben würde ... War halt eine Minimierung des Aufwands bei einer Test VM nur für einen Forum-Thread. Wäre es nicht gegangen, dann hätte ich noch etwas rumprobiert, aber da alles funktioniert hat, war alles ok für mich ...

Ggf. ist das Problem mit dem fehlenden cranberry-gtk-module darauf zurück zu führen.... Aber das hat mich bisher nicht wirklich interessiert 🙂

Edit:
Einfach mal ganz aus Interesse:
mittels apt purge openjdk und cranberry gtp modul Pakete runter geschmissen, noch ein apt autoremove hinterher um nicht mehr benötigte Abhängigkeiten zu entfernen ....
Nach einem apt install openjdk-14-jdk fehlen das cranberry-gtk-module - das ist also unabhängig. Wurde auch nicht als empfohlenes Paket angeführt.

Ansonsten scheint da erst einmal nichts zwingend benötigt worden zu sein, was da sonst mit installiert wurde.

Ansonsten auch einmal aus reiner Neugierde noch einmal die Pakete runter geworfen. -headless ist bei dem anderen Paket auch als Abhängigkeit mit enthalten. Daher noch einmal erst headless installiert um zu schauen, was die Differenz ausmacht:

Die folgenden NEUEN Pakete werden installiert:
libice-dev libpthread-stubs0-dev libsm-dev libx11-dev libxau-dev libxcb1-dev libxdmcp-dev libxt-dev openjdk-14-jdk x11proto-core-dev
x11proto-dev xorg-sgml-doctools xtrans-dev

Es sind also schon ein paar Pakete, die da mehr dazu kommen auch aus X11 Sicht. Aber das diese gefehlt haben scheint nicht interessiert zu haben. Die Frage ist maximal, ob das Oracle Paket da irgendwas mitgeliefert hat, aber Abhängigkeiten hatte das Paket nicht. Das hatte ich als erstes installiert und danach gab es keine unerfüllten Abhängigkeiten ...

Aber egal - genug Zeit investiert in diesen Punkt 🙂
 
Zuletzt bearbeitet von einem Moderator:
So ich habe die jdk´s runter und wieder rauf bliblablubb, ende vom Lied ... Windows 10.
Dauerte zwar ewig bis alles eingerichtet war aber dafür läuft jetzt alles so wie es soll.
Ich danke euch vielmals für eure Mühen auch wenn ich leider nicht das gewünschte Ergebnis bekommen habe.
 
@Saylles vielleicht probierst du es mal jetzt von Win10 aus auch in einer VM. Ich würde nach all dem auch vermuten, dass bei dir ein Treiber-Problem vorlag. Du hättest natürlich in der Treiberauswahl, mal auf einen anderen als den default-Treiber gehen können, aber dafür ist es ja jetzt eh zu spät 😀.

Btw. Ich nutze Linux/Ubuntu als meine tagtägliche Umgebung auf Arbeit (zu Hause Win10 wegen zocken... 😉) und hatte diese Art von Problem bei all meinen SWT- und JavaFX-Projekten nie. OK, AWT/Swing habe ich schon seit mehr als einem Jahrzehnt nicht mehr in einem Projekt verwendet, höchstens hier mal für eine Demo, wie man das mit JavaFX verbinden kann.
 

Zurück
Oben