• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Ausführbarkeit von Code testen bzw. Remote Debugging

nonickatall

nonickatall

Mitglied
Wenn ich eine Anwendung schreibe, die von der Verfügbarkeit bestimmter Recourcen abhängt.
Also zum Beispiel bestimmte Hardware, Treiber, Netzwerkzugriff, Server-Dienste was auch immer, kann ich ja mit Remote Debugging arbeiten, wenn das auf der Maschine, auf der ich code, nicht der Fall ist.

In meinem Fall greife ich beispielsweise auf GPIO Pins auf einem Raspberry zu. Das klappt auch. Wenn ich an anderer Stelle codiere, also beispielsweise an der GUI arbeite und die GPIOS nicht brauche, möchte ich das Programm aber einfach unter Windows debuggen.

Dann muss ich ja irgendwie prüfen, ob ich die GPIOS aufrufen kann. Sonst führt der Aufruf ja zu möglicherweise zu einer Exception.

Macht man da, um am Beispiel GPIO zu bleiben, eine Methode mit einer Rückgabe in der Klasse GPIO, die mit try und catch arbeitet, um vorher zu prüfen, ob GPIO überhaupt verfügbar ist, die ich dann bei Programmstart einmal ausführe und dann im Code drauf reagiere? Also zum Beispiel Aufrufe an die GPIO Klasse gar nicht erst weiterleite, oder muss man dann im Grunde jede Methode mit try und catch versehen?

Wie macht man das sinnvoll? Nur mal so konzeptionell gefragt...
 
mihe7

mihe7

Top Contributor
Entkopplung lautet hier das Zauberwort. Wie die im Detail aussieht, hängt aber von der Situation ab.

Wenn Du z. B. pi4j anschaust (eine Java-Lib, die ich gerade gegoogelt habe), dann ist dort bereits alles über Platform und Provider entkoppelt. Beispiel unter https://pi4j.com/documentation/create-context/

Du könntest also beim Programmstart feststellen, ob das Programm unter Windows läuft, falls ja, dann erzeugst Du einen Context mit gemockten Objekten, ansonsten mit "echten". Es könnte sogar sein, dass das Teil das automatisch macht, da müsste man sich jetzt ein wenig einlesen.

Aber das wäre so das Prinzip: Schnittstellen definieren, auf dem Pi und unter Windows unterschiedliche Implementierungen verwenden.
 
nonickatall

nonickatall

Mitglied
Top, wie immer hilfreich.. 👍

Das Ganze scheint für einen Anfänger nicht ganz einfach zu sein. o_O

Habe da jetzt mal einen Beispielcode implementiert, um das überhaupt mal zu testen.

Hat jetzt zwar mit der Ausgangsfrage nichts zu tun aber vielleicht hast Du dazu auch eine Idee.

Wenn ich folgenden Code verwende:

Java:
import com.pi4j.component.switches.SwitchListener;
import com.pi4j.component.switches.SwitchState;
import com.pi4j.component.switches.SwitchStateChangeEvent;
import com.pi4j.device.piface.PiFace;
import com.pi4j.device.piface.PiFaceLed;
import com.pi4j.device.piface.PiFaceSwitch;
import com.pi4j.device.piface.impl.PiFaceDevice;
import com.pi4j.wiringpi.Spi;

import java.io.IOException;

public class PiFaceApp {

    private static PiFace piface;

    public static void main(String[] args) {
        try {
            piface = new PiFaceDevice(PiFace.DEFAULT_ADDRESS, Spi.CHANNEL_0);
        } catch (IOException e) {
            piface = null;
            e.printStackTrace();
        }

        if (piface != null) {

            piface.getSwitch(PiFaceSwitch.S1).addListener(new SwitchListener() {

                public void onStateChange(SwitchStateChangeEvent switchStateChangeEvent) {
                    if (switchStateChangeEvent.getNewState() == SwitchState.ON) {
                        piface.getLed(PiFaceLed.LED0).on();
                    } else {
                        piface.getLed(PiFaceLed.LED0).off();
                    }
                }

            });

            piface.getSwitch(PiFaceSwitch.S2).addListener(new SwitchListener() {

                public void onStateChange(SwitchStateChangeEvent switchStateChangeEvent) {
                    if (switchStateChangeEvent.getNewState() == SwitchState.ON) {
                        piface.getLed(PiFaceLed.LED1).blink(200L);
                    } else {
                        piface.getLed(PiFaceLed.LED1).blink(0);
                        piface.getLed(PiFaceLed.LED1).off();
                    }
                }

            });

        }

    }
}

Und in Eclipse in den Projekteinstellungen "Build Path" die pi4j Libarys einbinde, die ich mir herunter geladen habe, dann läuft das Projekt natürlich nicht, wenn ich es auf Eclipse in Windows starte und wirft Exceptions.

Verständlich, denn es gibt ja auch keine Hardware dazu und vermutlich sind die Libarys auch nicht Windows kompatibel.

Wenn ich das Ganze als .jar exportiere, dann sind die Libaries ja enthalten und ich kann das Ganze auf dem Raspberry starten.

Starte ich es in einer SSH Konsole mit "java -jar TestA.java" läuft die Anwendung wie sie soll.

Starte ich das Ganze aber in Eclipse "Remote", was mit einem anderen Projekt funktioniert, dann bekomme ich folgende Fehlermeldungen:

Java:
Mai 01, 2021 7:52:06 NACHM. com.pi4j.util.NativeLibraryLoader load

SEVERE: Unable to load [libpi4j.so] using path: [/lib/raspberrypi/dynamic/libpi4j.so]

java.lang.IllegalArgumentException: The path has to be absolute, but found: \lib\raspberrypi\dynamic\libpi4j.so

    at com.pi4j.util.NativeLibraryLoader.loadLibraryFromClasspath(NativeLibraryLoader.java:136)

    at com.pi4j.util.NativeLibraryLoader.load(NativeLibraryLoader.java:105)

    at com.pi4j.wiringpi.Spi.<clinit>(Spi.java:80)

    at PiFaceApp.main(PiFaceApp.java:19)

Hast du dazu eine Idee?

Vielen Dank im Voraus
Ralf
 
mihe7

mihe7

Top Contributor
Wenn ich es richtig sehe, musst Du Version 2.x von pi4j verwenden. Auf der oben verlinkten Seite steht: "Version 1 was implemented using a static singleton, while version 2 uses a “Context” to avoid static singletons."

Beispiele für V2 sind auf der Seite auch angegeben, z. B. https://pi4j.com/documentation/io-examples/digital-output/

Mehr kann ich dazu nicht sagen, ohne es ausprobiert zu haben :)
 
nonickatall

nonickatall

Mitglied
Wenn ich es richtig sehe, musst Du Version 2.x von pi4j verwenden. Auf der oben verlinkten Seite steht: "Version 1 was implemented using a static singleton, while version 2 uses a “Context” to avoid static singletons."

Beispiele für V2 sind auf der Seite auch angegeben, z. B. https://pi4j.com/documentation/io-examples/digital-output/

Mehr kann ich dazu nicht sagen, ohne es ausprobiert zu haben :)
Hallo,

danke für deine Antwort. Bin erst jetzt dazu gekommen mal weiter zu machen. Ich denke nicht das dies an der Version liegt. Ich habe mir mal ein anderes Beispiel herunter geladen und in mein Projekt eingebunden.

Beispiel

Da sieht man unter "EXAMPLE JAVA PROGRAM" das in einem Link die GithubRepository der Pi4j Version 1.4 hinterlegt ist.

Die habe ich auch installiert und in Eclipse als Libary hinterlegt. Wenn ich die Main Methode ändere und die Klasse aus meinem Projekt heraus aufrufe, dann bekomme ich bei "Remote Debug" Ausführung in Eclipse die Fehlermeldung:

Java:
Mai 04, 2021 12:12:16 VORM. com.pi4j.util.NativeLibraryLoader load
SEVERE: Unable to load [libpi4j.so] using path: [/lib/raspberrypi/dynamic/libpi4j.so]
java.lang.IllegalArgumentException: The path has to be absolute, but found: \lib\raspberrypi\dynamic\libpi4j.so
    at com.pi4j.util.NativeLibraryLoader.loadLibraryFromClasspath(NativeLibraryLoader.java:136)
    at com.pi4j.util.NativeLibraryLoader.load(NativeLibraryLoader.java:105)
    at com.pi4j.wiringpi.Spi.<clinit>(Spi.java:80)
    at myhome.Pi4j_Test.start(Pi4j_Test.java:32)
    at myhome.MyHomeStart.main(MyHomeStart.java:54)

Exportiere ich das aber als Jar File, kann ich es auf dem Raspberry problemlos mit "java -jar Myhome.jar" aufrufen. Also kommen die Libaries ja korrekt im Jar File mit.

Was mich wundert ist der Teil der Fehlmeldung die sagt: "The path has to be absolute, but found: \lib\raspberrypi\dynamic\libpi4.so"

Ich binde ja die Libs einfach im Projekt unter "Properties/Build Path/Libaries" ein und da steht natürlich zunächst ein absoluter Pfad, der aber natürlich auf der Eclipse Maschine liegt. Im Grunde muss!! der Pfad ja relativ sein, sonst läuft das Ganze ja nicht auf Linux und Windows bzw. auf anderen Maschinen, ohne die gleiche Pfadstruktur.

Wo ist da mein Denkfehler?

Hast du, oder gerne natürlich auch andere, ;) noch eine Idee?

LG
Ralf
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Ist der Code richtig Java Basics - Anfänger-Themen 3
josfe1234 code vereinfachen Java Basics - Anfänger-Themen 15
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
G Programm Code Java Basics - Anfänger-Themen 5
C Code zusammenfassen Java Basics - Anfänger-Themen 5
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
T Programmablaufsplaninterpretation in Code umformen Java Basics - Anfänger-Themen 1
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
M ISBN-Code Java Basics - Anfänger-Themen 26
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
N Kann man den Code vereinfachen? Java Basics - Anfänger-Themen 25
marcooooo Code erklären Java Basics - Anfänger-Themen 28
marcooooo Code erklären Java Basics - Anfänger-Themen 4
S Advent of Code Day4 Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
Gaudimagspam Caesars Code entziffern in Java Java Basics - Anfänger-Themen 8
Lukasbsc Wie kann ich meinen Code optimieren? Java Basics - Anfänger-Themen 4
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
parrot Code entferneJedeZweiteZiffer Java Basics - Anfänger-Themen 6
G Code kürzen Java Basics - Anfänger-Themen 5
Bluedaishi Source Code Signieren Java Basics - Anfänger-Themen 22
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
L Best Practice Code refactern Java Basics - Anfänger-Themen 30
G code kürzen Java Basics - Anfänger-Themen 16
A Code umschreiben Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
X Reverse algorithm engineering (Java code) Java Basics - Anfänger-Themen 6
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
S Bewertet meinen Code - Part 1 Java Basics - Anfänger-Themen 8
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Hierarchi im code darstellen Java Basics - Anfänger-Themen 11
S Struktogramm zu Code Java Basics - Anfänger-Themen 4
F Code kürzen Java Basics - Anfänger-Themen 9
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
S Hilfe bei meinem Code [Schleife]? Java Basics - Anfänger-Themen 5
S Brauche hilfe in Java [Fehler in mein Code]? Java Basics - Anfänger-Themen 2
J Array eintrag mit möglichst wenig code lösen Java Basics - Anfänger-Themen 16
N SelectionSort ; Code erläutern Java Basics - Anfänger-Themen 13
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
B Prüfen, ob Country Code in Europa ist? Java Basics - Anfänger-Themen 24
KopaCoda Getter mehrfach aufrufen -> ist das guter code? Java Basics - Anfänger-Themen 3
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
O I/O Code Gerüst vorgegeben Java Basics - Anfänger-Themen 30
R Dieser Code sagt mir nichts... Java Basics - Anfänger-Themen 4
C Klassendiagramm aus Java-Code entwickeln Java Basics - Anfänger-Themen 3
A Eine Krone in der Textausgabe - Mein Code Java Basics - Anfänger-Themen 11
B HTML Code in XML speichern Java Basics - Anfänger-Themen 3
J Variablen Hilfe bei diesem Code Java Basics - Anfänger-Themen 6
H projekt 1 code schöner schreiben. Java Basics - Anfänger-Themen 25
R Code Verkürzen? Java Basics - Anfänger-Themen 19
B Interpreter-Fehler Code verstehen und Compilerfehler Java Basics - Anfänger-Themen 2
H Interface Hilfe mit Code Java Basics - Anfänger-Themen 4
C Verbesserungsvorschlag für effizienteren Code - (Project Euler10) Java Basics - Anfänger-Themen 26
D Erste Schritte Code verstehen - HashSet Java Basics - Anfänger-Themen 8
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
H Code erläutern Java Basics - Anfänger-Themen 35
T Java Code erklären Java Basics - Anfänger-Themen 7
B Code Zeile unklar Java Basics - Anfänger-Themen 9
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
E ASCII-Code in Java ausgeben Java Basics - Anfänger-Themen 6
N Ich weiß nicht, wie ich meinen Code richtig designen soll und komme nicht weiter Java Basics - Anfänger-Themen 4
L Wie kann man fehlerfrei im Java Code auf die fxml Datei zugreifen? Java Basics - Anfänger-Themen 26
H Frage um den Code bildlich darzustellen Java Basics - Anfänger-Themen 2
U Methoden Code sinnvoll in Methoden einteilen Java Basics - Anfänger-Themen 2
R Problem mit Code Java Basics - Anfänger-Themen 3
D Erste Schritte Kontrolle Code Java Basics - Anfänger-Themen 17
D Text als Code in java-forum.com formatieren. Wie ? Java Basics - Anfänger-Themen 3
H 3 oder 4 Fehler im Code Java Basics - Anfänger-Themen 0
H 3 oder 4 Fehler im Code Java Basics - Anfänger-Themen 19
N Wie lerne ich neuen Code zu benutzen? Java Basics - Anfänger-Themen 6
S Unklarer Code (was passiert hier?) Java Basics - Anfänger-Themen 1
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
M Frage, wie dieser Code funktioniert, bzw. weshab er bei mir nicht funktioniert Java Basics - Anfänger-Themen 4
L Hilfe! Was macht dieser Code? Java Basics - Anfänger-Themen 1
WerIstDerBoogieman? Code review bzw. "Coaching" Java Basics - Anfänger-Themen 34
J Best Practice [Code Verbesserung] TXT einlesen und in Arrayliste speichern Java Basics - Anfänger-Themen 5
S Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 2
D Erste Schritte Was bedeutet dieser Code? Java Basics - Anfänger-Themen 23
S Code richtig / besser machbar? (Nicht sicher, ob Code selbst falsch ist) Java Basics - Anfänger-Themen 4
G Zinsberechnung - Fehler im Code Java Basics - Anfänger-Themen 35
U Methoden Code Quality und Stil Java Basics - Anfänger-Themen 5
J Klammer im Code Java Basics - Anfänger-Themen 11
J Code Verständnis Java Basics - Anfänger-Themen 9
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben