[JAVA] Was tun, wenn in einer Lightweight-JRE eine UnsupportedCharsetException auftritt?

Überblick

Wie im Artikel Erstellen einer Lightweight-JRE für die Verteilung beschrieben, erstellt Java 9 oder höher eine Lightweight-JRE, die aus den minimal erforderlichen Modulen besteht tun können.

Sie können den mit dem JDK gelieferten Befehl "jdeps" verwenden, um herauszufinden, welche abhängigen Module in der Lightweight-JRE enthalten sein sollen. Wenn Sie Ihre App jedoch auf der von Ihnen erstellten Lightweight-JRE ausführen, können die folgenden Ausnahmen auftreten:

UnsupportedCharsetException: EUC-JP

Dies ist eine Ausnahme, die auftritt, wenn Sie einen nicht unterstützten Zeichencode angeben. Es handelt sich um eine Ausnahme, die nicht in einem normalen JDK ausgelöst wird, bei dem es sich nicht um eine einfache JRE handelt. Sie sollte jedoch die im Befehl "jdeps" angegebenen Mindestmodule enthalten. Es wurde jedoch eine Ausnahme ausgelöst. Dies bedeutet, dass der Befehl jdeps allein nicht über genügend Module verfügt, um in die Lightweight-JRE aufgenommen zu werden.

In diesem Artikel erfahren Sie, wie Sie die oben genannten Ausnahmen vermeiden, wenn Sie JREs mit geringem Gewicht verwenden.

Warum tritt die Ausnahme auf?

Dies liegt daran, dass erweiterte Zeichencodes wie "EUC-JP" nicht im Modul "java.base" enthalten sind.

Übrigens im Javadoc des Moduls jdk.charsets von JDK9 die folgende Beschreibung es gibt.

Stellt Zeichensätze bereit, die sich nicht in java.base befinden (hauptsächlich Doppelbytezeichen und IBM Zeichensätze).

Dies bedeutet, dass japanische Zeichensätze ein zusätzliches Modul "jdk.charsets" erfordern. Wenn Sie den Zeichencode mit der Methode "Charset.forName" usw. im Java-Quellcode angeben (siehe unten), zeigt der Befehl "jdeps" das Modul "jdk.charsets" nicht an. Erstellen Sie daher eine einfache JRE. Sie müssen dabei vorsichtig sein.

Charset.forName("EUC-JP")

Ansatz

Wenn Sie mit dem Befehl "jlink" eine einfache JRE erstellen, können Sie erweiterte Zeichencodes verarbeiten, indem Sie das Modul "jdk.charsets" einschließen.

jlink --compress=2 --module-path ../jmods --add-modules java.base,jdk.charsets --output jre

Recommended Posts

Was tun, wenn in einer Lightweight-JRE eine UnsupportedCharsetException auftritt?
Was tun, wenn eine javax.el.PropertyNotWritableException auftritt?
Was tun, wenn in PlayFramework eine IllegalStateException auftritt?
Hinweise zur Vorgehensweise beim Auftreten einer WebView ClassNotFoundException in JavaFX 12
Was tun, wenn eine javax.batch.operations.JobStartException auftritt?
Was tun, wenn ein Fehler auftritt, wenn nokogiri bei der Bundle-Installation eingeht?
Was tun, wenn beim Installieren von Axios in einem React + Typescript-Projekt ein Fehler auftritt?
Was tun, wenn beim Starten von Tomcat eine ClassNotFoundException auftritt?
Was tun, wenn ein ActionController :: UnknownFormat-Fehler auftritt?
Fehler ExecJS :: RuntimeUnavailable: Was tun, wenn es auftritt?
Was tun, wenn die ffi-Installation beim Starten einer Anwendung in Rails fehlschlägt?
Was tun, wenn in GlassFish eine java.io.IOException auftritt?
Was tun, wenn die Methode in f: ajax nicht gefunden wurde?
Was ist zu tun, wenn ein bestimmtes Objekt in JSF convertDateTime nicht als Datum formatiert werden kann?
[Rails Tutorial Kapitel 2] Was tun, wenn Sie einen Fehlern im Spaltennamen machen?
Was tun, wenn bei Verwendung von Liferay 7 / DXP unter AWS ein SAX-Parser-Fehler auftritt?
[Rails 6] Was tun, wenn nach der Einführung von haml ein fehlender Vorlagenfehler auftritt? [Super easy]
Was tun, wenn in Docker ein gcc-Fehler auftritt?
Sammeln von Clientinformationen, wenn in einer Webanwendung ein Fehler auftritt
Was tun, wenn die Änderungen im Servlet nicht berücksichtigt werden?
Was tun bei Problem während der Inhaltsunterstützung?
Was tun, wenn Sie mit Docker-Compose auf das Problem node_modules stoßen?
Was tun, wenn ein Fehler in Rails auftritt? DB: migrate ((StandardError: Ein Fehler ist aufgetreten, diese und alle späteren Migrationen wurden abgebrochen :))
[Programmieranfänger] Was tun, wenn Schienen zu einem Fehler in der lokalen Entwicklungsumgebung werden?
Was tun, wenn beim Versuch, mit Eclipse zu erstellen, ein Fehler in der gemeinsam genutzten JNI-Bibliothek auftritt?
Eine Erinnerung, wenn ein aapt.exe-Fehler auftritt
undefinierte Methode Was tun, wenn Sie "user_signed_in" erhalten?
Was tun, wenn Sie in Thymeleaf Layout eine groovige Warnung erhalten?
Was tun, wenn blockierter Host: "Hostname" in Ruby on Rails angezeigt wird
Kein Platz mehr auf dem Gerät Was tun, wenn ein Fehler auftritt?
Was tun, wenn der Tomcat-Prozess bestehen bleibt, wenn Sie Tomcat in Eclipse stoppen?
Was ist zu tun, wenn auf den Schienen cHoge.connection aufruft, um eine Verbindung herzustellen? C.
Was tun, wenn Sie mit Reißverschluss sterben, wenn Sie Pom haben, wenn Sie ein ausführbares Glas mit Gradle erstellen?
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
So erstellen Sie eine leichte JRE für den Vertrieb
Was tun beim Debuggen von "Quelle nicht gefunden"?
Was verwenden Sie beim Konvertieren in String?
Was tun, wenn Sie glauben, dass Sie mit IntelliJ IDEA CE nicht Groovy-> Java können?
<f: ajax> <f: ajax> kann nicht an Nicht-ClientBehaviorHolder angehängt werden. Was tun, wenn Sie Eltern werden?
Was tun, wenn der Wert im zweiten getSubmittedValue () in JSF Validator null wird?
wildflly10 java8 ERROR [org.jboss.jca.core.tx.jbossts.XAResourceRecoveryImpl] (Periodische Wiederherstellung) IJ000906 Was tun, wenn ein Fehler auftritt?
Androd: Was tun gegen "The Realm befindet sich bereits in einer Schreibtransaktion in"
Was zu tun ist, wenn es ungültig ist, weil es nicht mit einem '-' beginnt
Bei Verwendung einer Liste in Java wird java.awt.List ausgegeben und ein Fehler tritt auf
[Ubuntu] Was tun, wenn MongoDB aufgrund eines SocketException-Fehlers nicht gestartet werden kann?
Was Sie wissen müssen, bevor Sie einen Test in einer iOS-App schreiben
Was tun, wenn die Meldung "Ein Server läuft bereits" angezeigt wird. Fehler beim Versuch, den Rails-Server zu starten
Was tun, wenn die Befehlszeile zu lang ist? Wird beim Erstellen eines Gradle-Projekts in Intellij IDEA angezeigt
[React.useRef] Was tun, wenn im Ereignis-Listener nicht auf den neuesten Status verwiesen werden kann?
Was ist nach der Installation von 'devise' 'bootstrap' von gemfile with Rails zu tun, wenn url ein Fehler ist?
Was tun, wenn in bind.pry eine falsche Anzahl von Argumenten angezeigt wird?