--enable-native-access

piha.gi

Mitglied
Guten Tag!
Leider kann ich mein Anfänger-Problem ohne eure Hilfe nicht lösen.
Ich benutze Java-Editor 21.01.01 von Gerhard Röhner um erstellen einer GUI-Anwendung.
Zur seriellen Kommunikation mit einem Arduino Board habe ich eine Bibliothek eingebunden.
Java:
import com.fazecast.jSerialComm.*;
Ich erhalte folgende Warnung:
"WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module"
... und
"Restricted methods will be blocked in a future release unless native access is enabled"
Ich bekomme es nicht hin, native access zu enablen.
Kann jemand helfen?
Danke Pit
 
Während der Entwicklung kannst du das einfach ignorieren. Es handelt sich um eine Warnung. Das Problem besteht weiter, wenn du die Warnung ausschaltest.
Wenn du deine Software weitergibst, dann kannst du:
Enable-Native-Access: ALL-UNNAMED
in die Manifest-Datei einfügen. Normalerweise erstellt man seine Software mit Maven. Dazu ein Beispiel:
XML:
// ...
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.4.0</version>
      <configuration>
        <archive>
          <manifestEntries>
            <Enable-Native-Access>ALL-UNNAMED</Enable-Native-Access>
          </manifestEntries>
        </archive>
      </configuration>
    </plugin>
    <!-- ...weitere Plugins... -->
  </plugins>
</build>
// ...
 
Zuletzt bearbeitet:
Ich danke für die schnelle Antwort.
Bevor die mir etwas hilft, muss ich noch viel lernen. Ivh habe keine Manifestdatei und nutze nich Maven. Sorry.
Vielleicht gibt es ja noch weitere Tips.
Ciao Pit
 
Java-Editor ...native access zu enablen
Zitiert lt. Google Gemini: "(..)
Sie müssen diese Option in den Ausführungseinstellungen des Java-Editors eintragen:

  1. Öffnen Sie die Einstellungen im Java-Editor:
    • Gehen Sie im Menü des Java-Editors zu "Einstellungen" oder "Optionen".
    • Suchen Sie dort nach einem Reiter oder Bereich, der sich mit "Ausführen", "Compiler-Optionen", "Laufzeitumgebung" oder "JVM-Parameter" beschäftigt.
  2. Fügen Sie das JVM-Argument hinzu:
    • Suchen Sie nach einem Textfeld, das für "Zusätzliche JVM-Parameter" oder "Kommandozeilenoptionen (Run)" vorgesehen ist.
    • Fügen Sie dort genau die folgende Option ein:
      --enable-native-access=ALL-UNNAMED

    • Bestätigen und speichern Sie die Einstellungen.
  3. Programm erneut ausführen:
    • Führen Sie Ihr Java-Programm im Java-Editor erneut aus. Die Warnung sollte nun nicht mehr erscheinen. (..)"
 
In jeder halbwegs brauchbaren IDE (z.B. in Netbeans oder VSCode) gibt es auch Einstellungen, um die JVM mit bestimmten Zusatzparametern zu starten. Da kann das auch rein.

Auch wenn man die Warnung ignorieren kann...es ist schon gut, vorher zu fragen und zu wissen, bevor man einfach drauflosignoriert.
 
Vielen Dank für alle Tips.
@White_Fox: OK, VSCode kann ich benutzen.
Ist es zu unverschämt, wenn ich Dich bitte mir zu sagen wie ich dort die JVM mit --enable-native-access=ALL-UNNAMED starten kann?
Danke im Voraus, ciao Pit
 
Vielen Dank für alle Tips.
@White_Fox: OK, VSCode kann ich benutzen.
Ist es zu unverschämt, wenn ich Dich bitte mir zu sagen wie ich dort die JVM mit --enable-native-access=ALL-UNNAMED starten kann?
Danke im Voraus, ciao Pit
Mein Tipp wäre, zusätzlich auch noch Maven anzusehen. Das macht vieles deutlich einfacher und wenn man etwas braucht, dann kann man meist Lösungen per Copy & Paste einbauen. Und wenn es um Anpassungen geht: Du kannst einfach die pom.xml weiter geben (z.B. an uns) und dann sieht man direkt den Aufbau und kann dann auch entsprechend einfach Anpassungen vorschlagen.

Statt VSCode würde ich Anfängern eher IntelliJ (Community Edition) Empfehlen. Das ist deutlich freundlicher für Anfänger.

Aber in VSCode kannst Du sagen:

Run -> Add Configuration. (So Du noch keine launch.json in Deinem Projekt hast, ansonsten wäre es Run -> Open Configuration)

Da öffnet sich dann im Editor etwas wie:
JSON:
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Current File",
            "request": "launch",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "JavaApp",
            "request": "launch",
            "mainClass": "de.kneitzel.JavaApp",
            "projectName": "javamavenapp"
        }
    ]
}


Das Element, dass Du da hinzu fügen musst, ist dann "vmargs" - das kann dann also so aussehen:
JSON:
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Current File",
            "request": "launch",
            "vmargs": "--enable-native-access=ALL-UNNAMED",
            "mainClass": "${file}"
        },
        {
            "type": "java",
            "name": "JavaApp",
            "request": "launch",
            "vmargs": "--enable-native-access=ALL-UNNAMED",
            "mainClass": "de.kneitzel.JavaApp",
            "projectName": "javamavenapp"
        }
    ]
}


Die anderen Felder können bei Dir natürlich abweichen ...


In IntelliJ hast Du einfach die Run Configuratios. Da hast Du dann eine UI, in der Du vmOptions direkt eintragen kannst. Da hast Du in der Symbolleiste neben dem grünen Dreieck Symbol (Run) ein Dropdown in dem Du "Edit Configurations..." auswählen kannst um ein Dialog zur Konfiguration zu bekommen.

Edit: Da fehlte hinter vmargs das Anführungszeichen!
 
Zuletzt bearbeitet:
Viel Spass und Erfolg. Und ich muss noch kurz editieren - hatte nach dem posten nicht mehr geschaut und die farbliche Darstellung zeigte ja direkt, dass da ein " hinter vmargs fehlte. Habe ich jetzt noch editiert.

Also bei JSON den key in " setzen und dann auch den Wert. Und wenn ich so einen generellen Hinweis zu JSON gebe, dann noch die kurze Beschreibung von JSON. Die anderen verwendeten Elemente wären dann noch:
  • [ ... ] die eckigen Klammern umfassen ein Array (bzw. Liste)
  • { ... } beschreibt ein Objekt mit mehreren Werten.
  • Werte/Einträge werden mit Komma getrennt.
Das ist eigentlich schon fast alles rund um JSON so dass launch.json ein Objekt in JSON enthält. Dieses hat einen Wert version und einen Wert configurations. letzteres ist ein Array aus Objekten und da sind dann zwei Objekte enthalten mit jeweils mehreren Werten.
 
Vielen Dank für alle Tips.
@White_Fox: OK, VSCode kann ich benutzen.
Ist es zu unverschämt, wenn ich Dich bitte mir zu sagen wie ich dort die JVM mit --enable-native-access=ALL-UNNAMED starten kann?
Danke im Voraus, ciao Pit
Das weiß ich, ehrlich gesagt, nicht genau. Ich würde aber mal in den Projekteinstellungen schauen, ob du da irgendetwas findest, das nach "start with args..." aussieht oder so, mit einem Textfeld um Argumente einzutragen.

Oder du ziehst dein Projekt mit Maven auf, wie Konrad es dir schon vorgeschlagen hat. Als – mächtigere – Alternative zu Maven kannst du auch Gradle benutzen.
Zu Gradle oder Maven würde ich dir auch raten, das hat viele Vorteile. Ein Vorteil wäre, daß du keinerlei Streß hast wenn du dein Projekt an einem anderen Rechner oder mit einer anderen IDE bearbeiten willst. Anderer Rechner oder andere IDE bedeutet immer viel Arbeit: Bibliotheken nachinstallieren, Konfiguration (wie eben z.B. --enable-native-access=ALL-UNNAMED-Startargument) anpassen, und so weiter.

In Gradle oder Maven trägst du diesen Kram einmal ein, und hast danach Ruhe davon. Sehr hilfreich ist das vor allem dann, wenn man seinen eigenen Rechner gegen einen neuen austauscht.
 

Zurück
Oben