Inhaltsverzeichnis:

Effiziente Java-Entwicklung für den Raspberry Pi - Gunook
Effiziente Java-Entwicklung für den Raspberry Pi - Gunook

Video: Effiziente Java-Entwicklung für den Raspberry Pi - Gunook

Video: Effiziente Java-Entwicklung für den Raspberry Pi - Gunook
Video: PROGRAMMIEREN LERNEN - Die ultimative Anleitung! 2024, Juli
Anonim

Dieses Instructable beschreibt einen sehr effizienten Ansatz für die Entwicklung von Java-Programmen für den Raspberry Pi. Ich habe den Ansatz verwendet, um Java-Fähigkeiten zu entwickeln, die von Low-Level-Geräteunterstützung bis hin zu Multithread- und netzwerkbasierten Programmen reichen. Der Ansatz ist nicht nur effizient, er ist kostenlos!

Grundsätzlich ist der Ansatz die Remote-Entwicklung mit NetBeans. NetBeans läuft auf einer Workstation (einem Desktop- oder Laptop-Computer, nicht dem Raspberry Pi), die über Wifi mit dem Raspberry Pi verbunden ist. Sobald alles richtig eingerichtet ist, können Sie ein Java-Programm in NetBeans schreiben und dann mit einem einzigen Klick das Programm auf der Workstation kompilieren und erstellen, das Programm auf den Pi herunterladen, das Programm auf dem Pi ausführen und die Ausgabe an die NetBeans-Konsole liefern. Magie! Sie können sogar das laufende Programm debuggen, Breakpoints setzen und Variablenwerte untersuchen. Mehr Magie!

Der Rest dieser Einführung beschreibt die Motivation für die Verwendung von Java und für die Remote-Entwicklung mit NetBeans. Wenn dir Motivation wichtig ist, lies weiter. Wenn Ihnen das egal ist, fahren Sie mit Schritt 1 fort.

Warum Java auf dem Raspberry Pi verwenden?

Es gibt viele Programmiersprachen für den Raspberry Pi, aber ich beschränke die Diskussion auf "professionelle" Programmiersprachen, die auf eigenständige Programme abzielen, Multitasking unterstützen, Hardware- und Netzwerkzugriff zulassen usw. Das bedeutet Java, Python oder C/C++. Die neuesten Versionen von Raspbian beinhalten Entwicklungs- und Laufzeitunterstützung für all diese Sprachen.

Python wird faktisch für die Verwendung auf dem Pi "befördert", zumindest teilweise wegen seiner leichten Erlernbarkeit für neue Programmierer. Ich bin ein erfahrener Programmierer und mag Python aufgrund einer zugegebenermaßen subjektiven Abneigung gegen einige seiner Eigenschaften, zum Beispiel dynamisches Tippen. Es gibt eine Eigenschaft von Python, für die ich eine objektive Abneigung habe – Leistung. Diese Quelle zeigt, dass Java immer schneller als Python 3 ist und je nach Aufgabe sogar Hunderte Mal schneller laufen kann.

C ist meiner Meinung nach eine "High-Level-Maschinensprache", d. h. etwas, das der Systemhardware oder zumindest dem Betriebssystem sehr nahe kommt. Sie können so ziemlich alles tun, und Sie können es so schnell wie möglich tun; Tatsächlich schlägt diese Quelle vor, dass C bis zu 7-mal so schnell laufen kann wie Java. Ich mag C auch nicht, da ich (subjektiv) einige seiner Eigenschaften nicht mag, die ich arkan, archaisch oder beides finde; zum Beispiel explizite Zeiger. Objektiv gesehen bedeutet die Tatsache, dass Sie alles tun können, dass Sie nur ein obskurer Fehler (z. Java verhindert solche Gefahren, daher ist Java sicherer. Ich glaube, dass die Sicherheit auch die Produktivität der Programmierer verbessert. Ich betrachte C++ als einen objektorientierten "Wrapper" um C, der nichts dazu beiträgt, die Gefahren von C zu beseitigen.

Fazit: Java ist schneller als Python. Java ist sicherer als C.

Gibt es Einschränkungen bei der Verwendung von Java?

Bisher konnte ich alles in Java machen, was ich in Python tun kann. Es gibt Dinge, die man in C tun kann, die man in Java nicht tun kann, aber bisher wurde alles, was ich tun wollte, von Java-Fans in der Pi-Community angesprochen. Ich werde ein Beispiel in einem späteren Schritt anbieten. Allerdings habe ich Sensoren von Anbietern gekauft, die "Treiber" für die Sensoren nur in Python (oder C/C++ für Arduino) lieferten, also musste ich das Java-Äquivalent schreiben; Der zusätzliche Aufwand ist nicht unbedingt produktiv, kann aber zu einem besseren Einblick in die Funktionsweise eines Sensors führen.

Warum Remote-Entwicklung auf Basis von NetBeans?

Ich habe festgestellt, dass die NetBeans-basierte Remote-Entwicklung die Produktivität bei der Verwendung von Java für den Raspberry Pi erheblich steigert. Ich bin zuversichtlich, dass Sie den Ansatz verwenden können, um aufgrund der inhärenten Eigenschaften von Java schnelle und sichere Programme zu erstellen, während Sie sie viel schneller schreiben, bauen und debuggen als andere Ansätze, die ich gefunden habe, aufgrund der Remote-Entwicklung mit dem "professionellen" grade" NetBeans Integrated Development Environment (IDE).

Es könnte nützlich sein, diese "anderen Ansätze" kurz zu diskutieren. Alle erfüllen die grundlegenden Kriterien, dass der Raspberry Pi keine Tastatur, Maus oder Display angeschlossen hat. Es gibt viele Gründe für dieses Kriterium, aber mein Hauptgrund ist, dass ich mobile Roboter entwickle und ich nicht möchte, dass der Pi mit anderen Peripheriegeräten als Roboter-Subsystemen verbunden ist, auch nicht während der Entwicklung.

Der in Raspbian enthaltene VNC-Server bietet eine Remote Graphical User Interface (GUI), die eine Form der Remote-Entwicklung ermöglicht, bei der nur die Remote-GUI auf der Workstation läuft und alles andere, Schreiben, Kompilieren und Bauen, auf dem Pi stattfindet. Mit VNC ist es einfach, die Java-fähigen Entwicklungstools zu verwenden, die in Raspbian enthalten sind, wie BlueJ, Geany und Greenfoot. Einige davon können als IDE betrachtet werden; Ich finde sie jedoch weit von professioneller Qualität entfernt.

Es ist technisch möglich, eine professionelle Java-IDE wie Eclipse oder NetBeans auf dem Raspberry Pi zu installieren und über VNC remote zu verwenden. Berichte und der gesunde Menschenverstand legen nahe, dass die Ergebnisse aufgrund des großen Speicherbedarfs und der CPU-Leistung, die solche IDEs benötigen, sowie der durch eine Remote-GUI verursachten Netzwerklatenz enttäuschend wären.

Sowohl Eclipse als auch NetBeans laufen sehr gut auf einer Workstation. Mit Eclipse ist das Schreiben von Code eine angenehme Erfahrung, das Erstellen des Programms jedoch nicht. das Herunterladen des Programms muss außerhalb von Eclipse erfolgen; Das Ausführen des Programms auf dem Pi ist völlig unabhängig von Eclipse. Das Gesamtergebnis ist ein mehrstufiger, fast schmerzhafter Prozess, der das Remote-Debugging nicht unterstützen kann. NetBeans verfügt über integrierte Kompilierungs-, Erstellungs-, Download-, Remote-Ausführungs- und Remote-Debugging-Funktionen, was es zu einem überlegenen Ansatz macht.

Schritt 1: Einrichten des Raspberry Pi

Um den Remote-Entwicklungsansatz zu verwenden, müssen Sie zunächst das Ziel-Raspberry Pi einrichten. Es gibt viele Ressourcen, einschließlich Instructables, die beim Einrichten eines Raspberry Pi helfen. Hier finden Sie die Grundlagen zum Einrichten des Pi (und mehr).

Dieses Instructable geht davon aus, dass Sie

  • installieren Sie das neueste Raspbian; Stellen Sie sicher, dass Sie die Pi-Benutzer-ID und das Passwort aufzeichnen
  • richten Sie Wifi ein und verbinden Sie sich mit Ihrem Router (siehe dies); Stellen Sie sicher, dass Sie die IP-Adresse des Pi aufzeichnen
  • Aktivieren Sie SSH (siehe dies), um den Fernzugriff auf den Pi von der Workstation aus zu ermöglichen

Sobald Sie die Einrichtung abgeschlossen haben, können Sie das Display, die Tastatur und die Maus vom Pi ausschalten und trennen. Dies ist einer der Hauptvorteile der Remote-Entwicklung. Sie müssen einen beliebigen Wifi-Dongle angeschlossen lassen (natürlich nicht erforderlich für ein Pi-Modell 3 oder Pi Zero W), und dann können Sie den Pi einschalten.

Öffnen Sie zum Testen einen SSH-Client auf Ihrer Workstation, z. B. Terminal unter MacOS oder putty unter Windows. Geben Sie dann den Befehl ssh (secure shell) mit folgendem Formular ein:

ssh the_pi_ip_address -l the_pi_user_id

Sie sollten aufgefordert werden, das Passwort Ihrer Pi-Benutzer-ID einzugeben. Wenn keine Eingabeaufforderung erscheint, überprüfen Sie, ob Sie die richtige IP-Adresse im ssh-Befehl eingegeben haben. Geben Sie Ihr Passwort ein (es wird ausgeblendet) und Sie sollten dann die Shell-Eingabeaufforderung des Pi sehen, die ungefähr so aussieht:

pi@raspberrypi:~ $

Wenn die Eingabeaufforderung nicht angezeigt wird, überprüfen Sie die von Ihnen verwendete Benutzer-ID und das verwendete Kennwort.

Jetzt müssen Sie den Pfad zur Java-Laufzeit finden und bestätigen, dass die Standardversion Java 8 ist (sollte für das neueste Raspbian gelten). Um den Java-Laufzeitpfad zu finden, geben Sie im ssh-Client den Befehl ein

sudo update-alternatives --display java

Sie sollten eine Antwort mit den ersten beiden Zeilen sehen, die wie folgt aussehen:

java - automatischer Modus

Link beste Version ist /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/bin/java

Das "-8-" in der zweiten Zeile bestätigt, dass die Standardlaufzeit Java 8 ist. Notieren Sie den Pfad in der zweiten Zeile, da Sie ihn in einem späteren Schritt für die Konfiguration von NetBeans für die Remote-Entwicklung benötigen.

Wenn die Standardlaufzeit nicht Java 8 ist, geben Sie im ssh-Client den folgenden Befehl ein, um zu Java 8 zu wechseln (vorausgesetzt, es ist installiert)

sudo update-alternatives --config java

Schritt 2: NetBeans auf der Workstation installieren

Jetzt müssen Sie NetBeans auf Ihrer Workstation installieren. Zeigen Sie in Ihrem Workstation-Browser auf die NetBeans-Downloadseite. Sie werden mehrere mögliche Bundles sehen, die die beiden Editionen von Java sowie andere Sprachen unterstützen. Alles, was Sie für die Java-Entwicklung für den Raspberry Pi benötigen, ist Java SE, aber Sie können das Java EE-Bundle oder das All-Bundle erhalten. Sobald Sie sich für ein Bundle entschieden haben, klicken Sie auf die entsprechende Download-Schaltfläche. Weitere Installationsanweisungen für Ihr Workstation-Betriebssystem finden Sie hier.

Nachdem Sie NetBeans installiert haben, starten Sie es (möglicherweise automatisch nach der Installation). Sie sollten das NetBeans-Hauptfenster sehen, wie in der Abbildung gezeigt. Das Bild wurde auf einem Mac aufgenommen und das Hauptfenster sieht unter Windows möglicherweise etwas anders aus.

Nachdem Sie NetBeans erfolgreich installiert und gestartet haben, fahren Sie mit dem nächsten Schritt fort.

Schritt 3: Konfigurieren Sie den Raspberry Pi als Remote-Plattform in NetBeans

Konfigurieren Sie den Raspberry Pi als Remote-Plattform in NetBeans
Konfigurieren Sie den Raspberry Pi als Remote-Plattform in NetBeans

Die folgenden Aktionen konfigurieren den Raspberry Pi als Remote-Java-SE-Plattform für NetBeans. Dies ermöglicht NetBeans das Herunterladen und Ausführen von Java-Programmen auf dem Pi. Eine etwas allgemeine Beschreibung finden Sie hier.

HINWEIS: In diesem und den folgenden Schritten zeige ich umgebungsspezifische Werte für verschiedene Aspekte der Konfiguration und Codierung an; bei dir wird es natürlich anders sein.

So konfigurieren Sie den Pi als Remote-Plattform:

  1. Wählen Sie in der NetBeans-Hauptmenüleiste Tools -> Java-Plattformen. Sie sehen das Popup-Fenster von Java Platform Manager (Abbildung 1).
  2. Klicken Sie unten links auf Plattform hinzufügen. Sie sehen das Popup-Fenster Add Java Platform [Plattformtyp] (Abbildung 2).
  3. Wählen Sie Remote Java Standard Edition. Weiter klicken. Sie sehen das Popup Java-Plattform hinzufügen [Remoteplattform einrichten] (Abbildung 3 zeigt das Popup, nachdem ich die richtigen Werte für meine Umgebung in die Felder eingegeben habe).
  4. Geben Sie im Feld Plattformname einen Namen für den Pi ein. Sie können so ziemlich alles verwenden, aber es muss einzigartig sein.
  5. Geben Sie im Feld Host die IP-Adresse für den Pi ein, die Sie in Schritt 1 gefunden haben.
  6. Geben Sie im Feld Benutzername den Benutzernamen ein, den Sie in Schritt 1 verwendet haben.
  7. Lassen Sie die Option Kennwortauthentifizierung verwenden aktiviert und geben Sie im Feld Kennwort das Kennwort ein, das Sie in Schritt 1 erstellt haben.
  8. Im Feld Remote JRE Path müssen Sie den größten Teil des Pfads zur Java-Laufzeit auf dem Pi eingeben. In Schritt 1 war es /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/bin/java. Sie müssen jedoch /bin/java im Feldwert ablegen.
  9. NetBeans lädt das ausführbare Programm in ein Arbeitsverzeichnis auf dem Pi herunter, das im Feld Working Dir angegeben ist. Der Standardwert ist /the_Pi_user_ID/NetBeansProjects/ und ist vollkommen akzeptabel. Wenn Sie möchten, können Sie etwas anderes verwenden, das jedoch der_Pi_user_ID zur Verfügung stehen muss (Bild drei).
  10. Klicken Sie unten rechts im Popup auf Fertig stellen. Nach der Verarbeitung sollten Sie erneut das Popup-Fenster von Java Platform Manager sehen. Jetzt sollten Sie Ihren Remote-Pi (unter dem Namen, den Sie in Aktion 4 oben verwendet haben) unter der Kategorie Remote Java SE sehen (Bild 4).
  11. Klicken Sie unten links auf Test Platform, um die Verbindung zwischen NetBeans und Ihrem Pi zu testen. Sie sehen zuerst ein Popup mit der Meldung Verifying Remote Platform. Wenn erfolgreich, erhalten Sie ein zweites Popup-Fenster, das die Verbindung … erfolgreich hergestellt anzeigt. Wenn nicht, müssen Sie die Informationen, die Sie in den Aktionen 5-9 oben in das Popup-Fenster Java-Plattform hinzufügen [Remote-Plattform einrichten] eingegeben haben, überprüfen und korrigieren. Sie können dies über das Popup-Fenster von Java Platform Manager tun; Wählen Sie einfach Ihre Pi-Plattform aus und bearbeiten Sie dann die Felder auf der rechten Seite des Popups.
  12. Klicken Sie nach einer erfolgreichen Verbindung im Java Platform Manager-Popup auf Schließen. Sie sehen nun das NetBeans-Hauptfenster.

Jetzt kann der wahre Spaß beginnen!

Schritt 4: Erstellen Sie ein Java-Projekt auf der Workstation

Dies soll keine vollständige Erklärung der Verwendung von NetBeans oder Java sein, aber ich werde die minimalen Aktionen beschreiben, um ein Programm in NetBeans auf der Workstation zu schreiben und das Programm schließlich remote auf dem Raspberry Pi auszuführen.

In NetBeans müssen Sie zuerst ein Projekt erstellen, das die Java-Klasse(n) für das Programm enthält. Außerdem befinden sich in Java Klassen in Paketen, um Organisation und Sicherheit zu unterstützen. So erstellen Sie das Projekt und erstellen optional ein Paket und eine Klassendatei:

  1. Klicken Sie im NetBeans-Hauptfenster auf das Symbol für das neue Projekt (2. von links). Sie sehen das Popup Neues Projekt [Projekt auswählen] (Bild eins).
  2. Die Standardeinstellungen (Kategorie: Java, Projekt: Java-Anwendung) sind für dieses Beispiel korrekt, klicken Sie also einfach auf Weiter. Sie sehen das Popup-Fenster Neue Java-Anwendung [Name und Speicherort] (Abbildung 2 zeigt Werte für mein Beispiel). HINWEIS: Ich habe meine Benutzerinformationen mit den farbigen Rechtecken geschwärzt.
  3. Geben Sie im Feld Projektname einen gültigen Java-Projektnamen Ihrer Wahl ein. Der Name muss mit einem Großbuchstaben beginnen, und die Konvention schlägt beim Verketten von Wörtern die Groß-/Kleinschreibung vor.
  4. Das Feld Projektspeicherort steuert, wo sich das Projekt in Ihrem Dateisystem befindet. Die Standardeinstellung variiert je nach Betriebssystem, kann aber sicher akzeptiert werden.
  5. Im Feld Projektordner können Sie den Ordnernamen für das Projekt steuern. Ich finde es am besten, die Standardeinstellung zu verwenden, die eine Verkettung des Felds Standort und des Felds Name ist.
  6. Wenn das Kontrollkästchen Hauptklasse erstellen aktiviert ist, erstellt NetBeans automatisch ein Paket und eine Hauptklassendatei (ein Programm, das über die Befehlszeile ausgeführt werden kann) mit demselben Namen wie das Projekt. Ich denke, normalerweise sollte es deaktiviert sein, aber in diesem Fall lasse ich es aktiviert, wodurch explizite Aktionen vermieden werden, die sonst dafür erforderlich sind (Bild zwei).
  7. Klicken Sie auf Fertig stellen, um das Projekt, ein Paket und eine Hauptklassendatei zu erstellen. Jetzt zeigt der obere linke Bereich des NetBeans-Hauptfensters Ihr Projekt, das ein einzelnes Paket enthält, das wiederum eine einzelne Klassendatei mit einer main()-Methode enthält. Der obere rechte Bereich enthält den Standardquellcode für die Hauptklasse (das Programm), die automatisch von NetBeans generiert wird (Abbildung 3).

An dieser Stelle könnten Sie Code in die main-Methode schreiben und auf der Workstation ausführen. Das kann manchmal wünschenswert sein, ist aber für dieses Instructable nicht erforderlich, also fahren Sie mit dem nächsten Schritt fort.

Schritt 5: Konfigurieren Sie das NetBeans-Projekt für die Remote-Ausführung auf dem Raspberry Pi

Um das NetBeans-Projekt und ein darin enthaltenes Programm so zu konfigurieren, dass es remote auf dem Raspberry Pi ausgeführt wird, gehen Sie wie folgt vor:

  1. Klicken Sie mit der rechten Maustaste oder mit zwei Fingern (je nach Betriebssystem der Workstation) auf das Projekt im Projektbereich des NetBeans-Hauptfensters, um das Projektmenü aufzurufen, und klicken Sie auf Eigenschaften. Sie sehen das Popup Projekteigenschaften (das Bild zeigt das Popup mit den richtigen Werten für mein Beispiel).
  2. Wählen Sie links unter Kategorien die Option Ausführen aus.
  3. Klicken Sie rechts neben dem Feld Konfiguration auf Neu. Geben Sie im daraufhin angezeigten Popup-Fenster Neue Konfiguration erstellen einen Namen für die Konfiguration ein und klicken Sie auf OK. Der Name kann alles sein; Ich habe gerade den Namen der Plattform ("My Pi") wiederverwendet. Sie sehen erneut das Popup-Fenster Projekteigenschaften.
  4. Klicken Sie auf das Dropdown-Symbol rechts neben dem Feld Runtime Platform. Wählen Sie aus der Liste im Popup die zuvor erstellte Remote-Plattform aus (in meiner Umgebung "My Pi").
  5. Klicken Sie auf OK, um die Remote-Plattform für das Projekt einzurichten. Sie sehen wieder das Hauptfenster.

Sie können jetzt Code schreiben und das Programm remote ausführen.

Schritt 6: Schreiben Sie ein Java-Programm auf der Workstation und führen Sie es auf dem Raspberry Pi aus

Der rechte Bereich im NetBeans-Hauptfenster zeigt die von NetBeans generierte Hauptklassendatei. Geben Sie eine einfache print-Anweisung in die main-Methode der Klassendatei ein (Bild eins). Es ist jetzt ein vollständiges Java-Programm, das etwas tut, wenn auch etwas sehr Einfaches.

Um das Programm auf dem Pi auszuführen, klicken Sie im Hauptfenster auf das Symbol Ausführen (den grünen Pfeil nach links). NetBeans kompiliert den Code, erstellt eine JAR-Datei, lädt die JAR-Datei auf den von der Remote-Plattform identifizierten Raspberry Pi herunter, führt das Programm auf dem Pi aus, erfasst die Ausgabe (System.out) des Programms und gibt diese Ausgabe an die NetBeans zurück Ausgabefenster unten rechts im Hauptfenster (Abbildung 2).

Sie haben jetzt Ihre Fähigkeiten für die Entwicklung von Projekten auf dem Raspberry Pi erheblich erweitert! Aber warte…. Es gibt mehr!

Schritt 7: Debuggen Sie das Java-Programm mit NetBeans

Eine der leistungsstärksten Funktionen einer industrietauglichen integrierten Entwicklungsumgebung wie NetBeans ist die Möglichkeit, das Programm während der Ausführung zu debuggen. NetBeans ermöglicht es Ihnen, die gesamte Suite von Debugging-Tools zu nutzen, während Sie remote ausgeführt werden. Dazu gehört das Setzen von Haltepunkten an "wichtigen" oder "störenden" Stellen im Programm und das Untersuchen des Wertes von Variablen im aktuellen Ausführungszustand.

Das einfache Programm im letzten Schritt ist zu einfach, um das Debuggen zu demonstrieren, daher habe ich dem Programm zusätzlichen Code hinzugefügt. Der zusätzliche Code fügt zwei Variablen hinzu.

Um die Debug-Tools zu nutzen, müssen Sie zuerst einen oder mehrere Breakpoints festlegen. Um einen Breakpoint zu setzen, klicken Sie auf die Zeilennummer, in der Sie die Ausführung unterbrechen möchten; ein rotes Rechtecksymbol erscheint und die gesamte Linie erhält einen roten Hintergrund (Bild 1).

Um das auf dem Pi ausgeführte Programm zu debuggen, klicken Sie im NetBeans-Hauptfenster auf das Debug-Symbol (unmittelbar rechts neben dem Ausführen-Symbol). Wie bei der normalen Ausführung kompiliert, erstellt, lädt NetBeans herunter, führt sie aus, erfasst die Ausgabe und gibt diese Ausgabe als Echo aus. Aber beim Debuggen stoppt NetBeans die Ausführung an Breakpoints und ermöglicht es Ihnen, den Ausführungsstatus zu überprüfen (Abbildung 2 zeigt den Variablenbereich unten rechts).

Die Ausführung stoppt am Breakpoint, bevor die Anweisung in der Zeile mit dem Breakpoint ausgeführt wird. Der grüne Hintergrund zeigt die nächste auszuführende Anweisung an. In meinem Beispiel mit einem Breakpoint in Zeile 9 existiert die Variable a also noch nicht, geschweige denn einen Wert.

Bewegen Sie nun den Cursor über das Debug-Menüsymbol im Hauptfenster (das erste Symbol mit dem Doppelpfeil nach unten rechts neben dem Debug-Symbol) und klicken Sie auf das Step-Over-Symbol (es hat ein blaues Dokument im Hintergrund und einen grünen Pfeil gegen den Uhrzeigersinn) im Vordergrund). [HINWEIS: Wenn Sie Ihr NetBeans-Hauptfenster breit genug machen, wird das Debug-Menü erweitert und die Debug-Aktionssymbole werden rechts neben dem Debug-Symbol angezeigt.] NetBeans führt die Anweisung am Haltepunkt aus und stoppt die Ausführung vor der nächsten Anweisung. Sie sehen nun, dass die Variable a existiert und den erwarteten Wert hat (Bild drei).

Klicken Sie zweimal auf das Step-Over-Symbol. Sie werden sehen, dass alle drei Variablen Werte haben; Beachten Sie, dass c immer noch null ist (Bild vier).

Klicken Sie einmal auf das Step-Over-Symbol. Sie werden sehen, dass die Variable c jetzt den richtigen Wert hat, d. h. die Summe der Variablen a und b (Abbildung 5).

Klicken Sie schließlich im Debug-Menü auf das Symbol Ausführen (ein grüner Kreis mit einem weißen Pfeil). Dadurch wird die Ausführung bis zum nächsten Haltepunkt oder bis zum Ende des Programms fortgesetzt, je nachdem, was zuerst eintritt. Jetzt erscheint der Ausgabebereich und zeigt die gleiche Ausgabe wie bei der normalen Ausführung, in diesem Fall den Text in der print-Anweisung.

Schritt 8: Führen Sie das Programm unabhängig von NetBeans aus

Es kann der Zeitpunkt kommen, an dem Sie Ihr Programm auf dem Raspberry Pi ausführen möchten, ohne "Hilfe" oder "Störung" von NetBeans. Es ist sehr einfach. Öffnen Sie zunächst einen SSH-Client für Ihren Pi.

Denken Sie ab Schritt 3 daran, dass NetBeans Ihr Projekt-JAR in einem Arbeitsverzeichnis auf dem Pi ablegt. Die Standardbasis ist /home/pi/NetBeansProjects für den Benutzer pi. Das spezifische Verzeichnis hat denselben Namen wie Ihr Projekt. NetBeans legt das jar in einem Unterverzeichnis namens dist ab. In meinem Beispiel lautet der vollständige Pfad /home/pi/NetBeansProjects/MyRemoteProg/dist. Im ssh-Client auf dem Pi können Sie zum Ausführen des Programms den Java-Befehl mit der Option 'jar' verwenden:

java -jar /home/pi/NetBeansProjects/MyRemoteProg/dist/MyRemoteProg.jar

Sie sehen die Ergebnisse der Ausführung im ssh-Client; In meinem Beispiel lautet die Ausgabe

Hallo vom Raspberry Pi!

Dies funktioniert, weil Informationen in der JAR-Datei angeben, welche Hauptklasse im JAR ausgeführt werden soll.

Sie können auch das Arbeitsverzeichnis (über cd) in den Speicherort der JAR-Datei ändern und dann einen kürzeren Befehl ausführen, um die gleichen Ergebnisse zu erzielen.

java -jar MyRemoteProg.jar

Schritt 9: Erstellen und herunterladen, aber das Programm nicht über NetBeans ausführen

Es gibt Situationen, in denen Sie möchten, dass NetBeans Ihr Programm erstellt und herunterlädt, es jedoch nicht ausführt. Eine solche Situation tritt auf, wenn Ihr Programm Tastatureingaben benötigt. Wenn dies der Fall ist, wird das Programm mit der Technik im vorherigen Schritt nach dem Erstellen und Herunterladen auf dem Raspberry Pi ausgeführt und erwartet daher Tastatureingaben vom Pi, aber natürlich ist keine Tastatur an den Pi angeschlossen. also hängt das Programm - nicht gut.

Sie müssen eine etwas andere Technik verwenden, um das Programm auszuführen. Grundsätzlich erstellen Sie eine "Dummy"-Hauptklassendatei, die im Wesentlichen nichts tut, und identifizieren sie als das nach dem Download auszuführende Programm. In diesem Fall wird der "Dummy" ausgeführt und Sie können dann Ihr "echtes" Programm direkt auf dem Pi ausführen.

Um diese Technik zu verwenden, erstellen Sie zuerst eine neue Hauptklasse:

  1. Rufen Sie das Projektmenü wie in Schritt 5 auf und klicken Sie auf Neu->Java-Hauptklasse. Sie sehen das Popup-Fenster Neue Java-Hauptklasse.
  2. Geben Sie im Feld Klassenname einen Namen ein. Der Name kann beliebig sein; Ich habe "Dummy" verwendet. Im Feld Paket können Sie das Paket der Klasse identifizieren; Sie wählen das Paket über das Dropdown-Menü rechts neben dem Feld aus. Die Klasse kann sich im selben Paket wie Ihr "echtes" Programm oder in einem anderen Paket befinden; Ich habe die neue Klasse in das gleiche Paket gepackt. Klicken Sie auf Fertig stellen. Sie sehen nun das NetBeans-Hauptfenster mit der neuen Datei oben rechts (Bild eins). Ich habe eine einfache Print-Anweisung zum Ausführen auf dem Pi hinzugefügt, aber nichts wird wirklich benötigt.

Um "Dummy" nach dem Download auszuführen, müssen Sie es zur "standardmäßig auszuführenden Hauptklasse" für das Projekt machen:

  1. Öffnen Sie die Projekteigenschaften wie in Schritt 5. Wählen Sie die Kategorie Ausführen aus. Klicken Sie rechts neben dem Feld Hauptklasse auf Durchsuchen. Sie sehen das Popup-Menü Browse Main Classes (Abbildung zwei).
  2. Wählen Sie die Klasse "Dummy" aus. Klicken Sie auf Hauptklasse auswählen. Sie sehen wieder die Projekteigenschaften.
  3. OK klicken. Sie kehren zum Hauptfenster zurück.

Wenn Sie nun auf das Run-Symbol klicken, erfüllt/erstellt NetBeans das gesamte Projekt, lädt das JAR mit allen Klassendateien auf den Pi herunter und führt die "Dummy"-Klasse aus (Bild drei).

Um Ihr echtes Programm auf dem Pi auszuführen, müssen Sie jetzt den Java-Befehl mit der Option 'classpath' verwenden, was erfordert, dass Sie die auszuführende Hauptklasse explizit angeben. Gehen Sie von einem SSH-Client in das Verzeichnis dist für Ihr Projekt. Der richtige Befehl hat die Form:

java -cp Projektname.jar Paketname. Klassenname

Der Projektname bezieht sich offensichtlich auf das Projekt; das ändert sich erst bei einem neuen Projekt. Der Paketname bezieht sich natürlich auf das Paket, und der Klassenname bezieht sich auf die auszuführende Hauptklasse. Wie bereits erwähnt, kann ein Projekt viele Pakete enthalten. Ebenso kann ein Paket viele Klassen enthalten, und alle können Hauptklassen oder Programme sein, die über die Befehlszeile ausgeführt werden können. Daher ist die 'Klassenpfad'-Technik sehr nützlich, um anspruchsvolle Programme mit vielen Klassen zu entwickeln, von denen einige Hauptklassen sind, nur um das Testen von Komponenten zu unterstützen.

Der folgende Befehl führt mein Beispielprogramm aus:

java -cp MyRemoteProg.jar myremoteprog. MyRemoteProg

Schritt 10: Nutzen Sie die NetBeans-Bibliotheksverwaltung

Einer der schwierigsten, aber wichtigsten Aspekte anspruchsvoller Programme ist der Umgang mit Bibliotheken, d. h. Code, den jemand bereits geschrieben hat. NetBeans leistet bewundernswerte Arbeit bei der Beseitigung der meisten Probleme bei der Bibliotheksverwaltung.

Als Beispiel verwende ich Pi4J, das Java-Programmen den Zugriff auf den Raspberry Pi GPIO, den I2C-Bus und andere Hardware-E/A ermöglicht. Pi4J ist nur ein Beispiel für die Unterstützung vieler lustiger Dinge auf dem Pi mit Java.

Sie müssen zuerst die Bibliothek auf Ihre Workstation herunterladen. Siehe die Pi4J-Downloadseite. Da Sie Pi4J nicht auf dem Pi installieren, laden Sie die ZIP-Datei auf Ihre Workstation herunter. Möglicherweise müssen Sie die ZIP-Datei nach dem Herunterladen explizit entpacken oder nicht.

Nun müssen Sie in NetBeans eine "globale Bibliothek" erstellen:

  1. Klicken Sie im NetBeans-Hauptmenü auf Extras -> Bibliotheken. Sie sehen das Popup-Fenster des Ant Library Managers (Bild eins).
  2. Klicken Sie unten links auf Neue Bibliothek. Sie sehen das Popup Neue Bibliothek (Abbildung 2).
  3. Geben Sie einen aussagekräftigen Namen ein, den Sie verwenden möchten, und klicken Sie auf OK. Sie sehen erneut das Popup-Fenster Ant Library Manager. Es zeigt nun die neu erstellte Bibliothek an (Bild drei).
  4. Klicken Sie rechts auf JAR/Ordner hinzufügen. Sie sehen das Popup-Fenster JAR/Ordner durchsuchen (Abbildung 4).
  5. Navigieren Sie zu pi4j-core.jar und wählen Sie es aus. Klicken Sie dann auf JAR/Ordner hinzufügen. Sie kehren zum Popup-Fenster Ant Library Manager zurück.
  6. Klicken Sie im Popup-Fenster des Ant Library Managers auf OK. Sie kehren zum NetBeans-Hauptfenster zurück.

Sie haben die Bibliothek hinzugefügt, damit sie in jedem Projekt verwendet werden kann. Jetzt müssen Sie die Bibliothek zu Ihrem Projekt hinzufügen:

  1. Rufen Sie das Popup-Fenster Projekteigenschaften auf (siehe Schritt 5) und wählen Sie die Kategorie Bibliotheken (Abbildung 5).
  2. Klicken Sie auf der rechten Seite des Popups auf Bibliothek hinzufügen. Sie sehen das Popup-Fenster Bibliothek hinzufügen (Abbildung sechs).
  3. Navigieren Sie zur Bibliothek und wählen Sie sie aus. Klicken Sie dann auf Bibliothek hinzufügen. Sie sehen wieder das Popup-Fenster Projekteigenschaften. Die Bibliothek wird jetzt in der Liste der Kompilierzeitbibliotheken im Popup angezeigt.
  4. Klicken Sie im Popup-Fenster Projekteigenschaften auf OK. Sie kehren zum Hauptfenster zurück.

Sie haben die Bibliothek zu Ihrem Projekt hinzugefügt, damit Ihr Programm sie verwenden kann. Sie können dieselbe Aktionsfolge für alle Bibliotheken ausführen, die Sie für ein Programm benötigen.

Sie benötigen die Bibliothek dreimal – kompilieren, erstellen und ausführen. Glücklicherweise erledigt das Hinzufügen der Bibliothek wie oben gezeigt bei NetBeans alles. Um dies zu bestätigen, habe ich eine weitere Hauptklasse erstellt, die das absolute Minimum tut, um die I2C-Fähigkeit in Pi4J zu nutzen (Bild 7). Die Tatsache, dass keine Fehler angezeigt werden, bedeutet, dass die Klasse TestPi4J kompiliert wird. Wenn Sie auf Ausführen klicken, werden Builds und Downloads erfolgreich ausgeführt; NetBeans lädt die Bibliothek zusätzlich zur JAR-Datei herunter, damit das Programm ausgeführt wird. Um letzteres zu überprüfen, können Sie die Technik in Schritt 9 verwenden und im ssh-Client den folgenden Befehl eingeben (aus dem Verzeichnis dist):

java -cp MyRemoteProg.jar myremoteprog. TestPi4J

Es ist aufschlussreich zu verstehen, wie NetBeans Bibliotheken handhabt. Wenn Sie sich im Verzeichnis dist für Ihr Projekt befinden, listen Sie den Inhalt des Verzeichnisses auf (verwenden Sie den Befehl ls) und Sie sehen ein lib-Unterverzeichnis. Listen Sie den Inhalt dieses Verzeichnisses auf und Sie sehen die in der globalen Bibliothek identifizierte JAR-Datei, die in meinem Beispiel pi4j-core.jar ist. Alle Bibliotheken, die Sie dem Projekt hinzufügen, werden im Verzeichnis lib angezeigt und stehen somit allen Programmen in der JAR-Datei des Projekts zur Verfügung.

Schritt 11: Viel Spaß

Ich habe einen Ansatz beschrieben, um eine sehr effiziente Java-Entwicklung für den Raspberry Pi zu erreichen. Der Raspberry Pi ist eine äußerst beliebte Technologie für ein breites Spektrum von Projekten. Java ist eine professionelle Programmiersprache, die gegenüber Python Leistungsvorteile und gegenüber C/C++ Sicherheitsvorteile bietet. NetBeans ist eine professionelle IDE, die die Produktivität von Programmierern erheblich steigert.

Ich finde die Kombination ziemlich überzeugend. Viel Spaß mit der Kombination für Ihre Projekte.

Empfohlen: