Info: Java FrameBuffer Library (Für SPI LCD Displays)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Kurze Info für Java "Leute" :)

    Für alle die unter Java auf eine einfache Weise ein kleines LCD-Display (z.B. von SainSmart oder ADA)
    nutzen wollen, habe ich eine ganz einfach zu nutzende Library erstellt.

    Die Anwendung ist ungefähr folgendermaßen:

    Code
    FrameBuffer   fb = new FrameBuffer("/dev/fb1");
    
    
    BufferedImage img = fb.getScreen();
    Graphics2D    g   = img.createGraphics();
    
    
    g.setColor(Color.RED);
    g.drawString("Hallo Welt !");

    Es gibt auch einen Emulations-Modus mit einem JPanel.

    Für die kleinen Displays spart das den ganzen X11 Overhead...

    Das ganze ist unter GitHub unter https://github.com/ttww/JavaFrameBuffer verfügbar.

    Falls jemand Anregungen hat, bitte melden :)

    Ciao,
    Thomas

  • Info: Java FrameBuffer Library (Für SPI LCD Displays)? Schau mal ob du hier fündig wirst!

  • 1. Geht unter Java 7 und früher (ich benutze die Oracle JDK 7)
    2. Braucht nur minimal Ressourcen
    3. Wusste nicht das es unter Java 8 gehen soll :)

    Danke für den Tip :)

  • Fa-bel-haft!

    Ich suchte nach einer Möglichkeit, Fotos auf dem Fernseher anzusehen ohne eine X Oberfläche starten zu müssen. Mit dem Raspi und dieser Lösung ist es aus Java heraus wunderbar einfach und vielseitig zu realisieren. Es ist auf Anhieb geglückt, Deine Lösung in mein Programm einzubinden.

    Vielen Dank für die Mühe!

    Ulrich


    PS: Was den Hinweis zu JavaFx angeht: Ich betrachte es als Nachteil, dass man bei JavaFx offenbar nur mit root Rechten an den Framebuffer heran kommt. Zitat aus https://jdk7.java.net/fxarmpreview/j…er-preview.html "JavaFX applications must be run as root in order to render to the framebuffer device and access the input devices.

  • :)
    Ich habe noch eine Zooming-Funktionalität für das Entwicklungs-Panel implementiert.
    Das macht es etwas einfacher für kleine Framebuffer-Screens zu entwickeln.

    Ulrich: Bitte, gerne :)

    Einmal editiert, zuletzt von ttww (9. Januar 2014 um 14:04)

  • Hallo Thomas,

    könntest Du vielleicht eine kurze Anleitung schreiben, bei mir funktioniert nämlich nicht mal die Installation (compileLinux.sh) und zwar spuckt sie so viele Fehler aus (cannot access FrameBuffer, no classes specified on command line etc), dass ich nicht weiss, wo ich anfangen soll sie zu fixen.

    Lg,
    Theo

  • Irgendwas passt da nicht:

    sudo sh compileLinux.sh
    javah
    Error: Could not find class file for 'org.tw.pi.framebuffer.FrameBuffer'.
    rm: Entfernen von „src/main/c/org_tw_pi_framebuffer_FrameBuffer_ScreenPanel.h“ nicht möglich: Datei oder Verzeichnis nicht gefunden
    rm: Entfernen von „src/main/c/org_tw_pi_framebuffer_FrameBuffer_UpdateThread.h“ nicht möglich: Datei oder Verzeichnis nicht gefunden
    gcc
    In file included from src/main/c/FrameBuffer.c:28:0:
    src/main/c/org_tw_pi_framebuffer_FrameBuffer.h:2:17: fatal error: jni.h: Datei oder Verzeichnis nicht gefunden
    compilation terminated.

    ls: Zugriff auf libFrameBufferJNI.so nicht möglich: Datei oder Verzeichnis nicht gefunden
    done

    Edit:
    Ok, ein Problem hab ich gefunden, auf meiner Pi ist Java woanders installiert, also ist der Pfad auch anders in dem Scriptfile:
    jniJdkHeader=/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/include
    jniSysHeader=/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/include/linux

    Trotzdem kann die Klasse nicht gefunden werden. Liegt das an der Verzeichnis Struktur evtl ? Klasse wird als org.tw.pi... angegeben ist aber in /src/java/org/tw/... zu finden. Hab noch nie wirklich mit JNI gearbeitet, daher frickeln ;)

    Edit 2:
    Der javah Aufruf in der Scriptdatei war auch falsch. Insbesondere Parameter -classpath bin. Es gibt ja gar kein bin Ordner in diesem Projekt Ordner. Also ist richtig:
    javah -d src/main/c -classpath src/main/java org.tw.pi.framebuffer.FrameBuffer

    Jetzt geht es weiter zu testen ob es auch klappt :D

    Edit 3:
    You have loaded library /home/pi/JavaFrameBuffer/libFrameBufferJNI.jnilib which might have disabled stack guard. The VM will try to fix the stack guard now.
    It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
    Exception in thread "main"
    java.lang.UnsatisfiedLinkError: /home/pi/JavaFrameBuffer/libFrameBufferJNI.jnilib: /home/pi/JavaFrameBuffer/libFrameBufferJNI.jnilib: Ungültiger ELF-Header (Possible cause: endianness mismatch)

    Kann mit 32/64bit incompatibilität zusammen hängen, aber hab die lib auf dem pi erzeugt, daher sollte das eigentlich in Ordnung sein. Versteh nicht was nun wieder nicht stimmt.
    Bis hier hin bin ich immerhin gekommen, vielleicht hilft es ja anderen... :/

    Einmal editiert, zuletzt von RyuKajiya (19. November 2014 um 20:50)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!