Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

312
Views
En OpenJdk, ¿cómo configuro el directorio de fuentes con la propiedad appendedfontpath?

Estoy tratando de hacer que mi aplicación use fuentes de una ubicación particular en una instalación de OpenJdk usando la propiedad appendedfontpath pero no funciona para mí.

 ../jre1.8.0_121+1/bin/java -Dappendedfontpath=/usr/lib/fonts/ -jar lib/songkong-4.7.jar -m /mnt/disk1/share

informando que no hay fuentes instaladas, pero la carpeta /usr/lib/fonts contiene una fuente ipag.ttf

Tenga en cuenta:

  • OpenJdk viene sin fuentes preinstaladas, depende de las fuentes instaladas en el sistema
  • Este es un sistema integrado que informa que no hay fuentes instaladas en el servidor, fc-list no devuelve nada
  • Si copio la fuente en la carpeta jre/lib/fonts, funciona, pero no puedo copiar nada en esta carpeta.
  • Tampoco puedo ejecutar comandos raíz como fc-cache -f

Si pudiera hacerlo funcionar simplemente especificando una carpeta de fuentes que contenga fuentes, sería una solución funcional para mí.

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede intentar configurar la variable de entorno JAVA_FONTS antes de iniciar la JVM para que conozca la ruta del directorio. Para su caso, esto podría hacerse export JAVA_FONTS=/usr/lib/fonts . Mi respuesta se basa en el artículo de fuentes Java Runtime Enviroment de la wiki de archlinux.


EDITAR:
La prueba en una máquina virtual sin fuentes instaladas muestra que la configuración de JAVA_FONTS no funciona y he llegado a la conclusión de que con su configuración podría no ser posible lograr su objetivo.
Usé el siguiente programa para reproducir el error en una máquina virtual sin fuentes instaladas:

 import javax.swing.*; public class example{ public static void main(String[] tArgs){ JFrame j = new JFrame(); j.add(new JButton("Test")); j.setVisible(true); j.pack(); } }

Aquí está mi Stacktrace: https://pastebin.com/fy3JDnkN
Dada la fuente de X11FontManager , el error ocurre mientras el Administrador de fuentes se construye en la línea con for (int i=0; i<fontConfigFonts.length; i++) { .

 public String[] getDefaultPlatformFont() { if (defaultPlatformFont != null) { return defaultPlatformFont; } String[] info = new String[2]; getFontConfigManager().initFontConfigFonts(false); FontConfigManager.FcCompFont[] fontConfigFonts = getFontConfigManager().getFontConfigFonts(); for (int i=0; i<fontConfigFonts.length; i++) { if ("sans".equals(fontConfigFonts[i].fcFamily) && 0 == fontConfigFonts[i].style) { info[0] = fontConfigFonts[i].firstFont.familyName; info[1] = fontConfigFonts[i].firstFont.fontFile; break; } } /* Absolute last ditch attempt in the face of fontconfig problems. * If we didn't match, pick the first, or just make something * up so we don't NPE. */ if (info[0] == null) { if (fontConfigFonts.length > 0 && fontConfigFonts[0].firstFont.fontFile != null) { info[0] = fontConfigFonts[0].firstFont.familyName; info[1] = fontConfigFonts[0].firstFont.fontFile; } else { info[0] = "Dialog"; info[1] = "/dialog.ttf"; } } defaultPlatformFont = info; return defaultPlatformFont; }

Esto hace que sea imposible agregar fuentes manualmente ya que NullPointerException ocurre antes de que tengamos acceso al Administrador de fuentes, este comportamiento parece no estar previsto dado el comentario un par de líneas más adelante.

Todavía podría ser posible lograr su objetivo si hay otro FontManager para Linux que no se bloquee sin una fuente de sistema predeterminada instalada, pero no pude encontrar ese reemplazo.

about 4 years ago · Santiago Trujillo Report

0

Una solución podría ser empaquetar las fuentes en su propio contenedor e intentar hacer algo como esto .

about 4 years ago · Santiago Trujillo Report

0

No necesita especificar el directorio de fuentes. Si está instalado en su máquina, el JRE seleccionará las fuentes automáticamente.

También enfrenté este problema en el pasado y encontré paquetes JRE abiertos preconstruidos con fuentes en github. Estos paquetes se publican bajo GNU GPL v. 2 con excepción de classpath.

https://github.com/ojdkbuild/ojdkbuild/releases/tag/1.8.0.121-1

Puede descargar la versión de Linux (java-1.8.0-openjdk-1.8.0.121-0.b13.el6_8.x86_64.zip) o puede buscar actualizaciones distintas de la 121 también en las versiones.

Nota: También puede incluir las fuentes True Type que faltan en jre/lib/fonts si es necesario.

Opción alternativa I

Instalación de las fuentes requeridas en su máquina. Esto funcionará a la perfección y no tendrá que configurar nada en el JRE.

Nota:

  • Si no tiene privilegios para instalar fuentes, puede copiar el directorio de fuentes /usr/share/fonts.
  • Si se trata de una partición de solo lectura, puede montar la partición en modo de lectura y escritura y copiar los archivos de fuentes.
  • En caso de que no quede espacio en la partición a la que pertenece /usr/share/fonts, puede copiar los archivos en un directorio diferente y hacer un enlace suave a él.

Opción alternativa II

Incluir las fuentes en el directorio jre/lib/fonts (crear directorio de fuentes si no existe) y configurar el archivo fontconfig.properties en jre/lib. No he probado esta opción, pero debería funcionar.

Editar:

  • Si las fuentes ya están instaladas en la máquina, JVM debería elegir las fuentes automáticamente. De lo contrario, puede especificar las fuentes como se menciona en la respuesta @ BdoubleB97 usando la variable de entorno JAVA_FONTS.
  • Si no tiene permiso para establecer la variable de entorno, puede pasar la variable de entorno durante el tiempo de ejecución como se muestra a continuación.

    ./java -DJAVA_FONTS=/usr/share/fonts Prueba

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!