JavaNativeRuntime

pizzadox9999

Mitglied
Hallo,

ich bin auf der suche nach etwas Hilfe mit der JavaNativeRuntime. Dabei handelt es sich um eine Technologie die eine Verbindung zu C Bibliotheken herstellt.
Mein Problem ist dabei folgendes. Es geht um ein Java Object, welches ich als Pointer dem C Code gebe. Dieser soll dann die Instanzvariablen mit Werten befüllen.
Konkret geht es darum, dass bei einem MouseMoveEvent die Instanzvariablen die Werte für die X und Y Coordinaten enthalten sollen. Aber der Wert bleibt stehts bei 0. Hier ist der Toplevelcode wo der Fehler sichtbar wird.

Java:
package org.jsfml;

import org.jsfml.graphics.RenderWindow;
import org.jsfml.system.Vector2i;
import org.jsfml.system.Vector2u;
import org.jsfml.window.ContextSettings;
import org.jsfml.window.VideoMode;
import org.jsfml.window.Window.WindowStyle;
import org.jsfml.window.event.Event;
import org.jsfml.window.event.KeyEvent;
import org.jsfml.window.event.MouseMoveEvent;
import org.jsfml.window.event.Event.EventType;

public class test {

    public static void main(String[] args) {
        JSFML.init();
       
        RenderWindow window=new RenderWindow();
       
        window.create(new VideoMode(800, 600), "test", WindowStyle.DEFAULT_STYLE, new ContextSettings());

        while(window.isOpen()) {
           
            Event event=new Event();
            while(window.waitEvent(event)) {
                switch (event.getType()){
                case EventType.CLOSED:
                    window.pollEvent(event);
                    window.destroy();
                    break;
                case EventType.KEY_PRESSED:
                    KeyEvent keyEvent=new KeyEvent(event.getType());
                    window.pollEvent(keyEvent);
                    System.out.println(keyEvent);
                    break;
                case EventType.MOUSE_MOVED:
                    Event mouseEvent=new Event(event.getType());
                    window.pollEvent(mouseEvent);
                    System.out.println(mouseEvent.mouseMove);
                    break;
                default:
                    window.pollEvent(event);
                    break;
                }  
            }
        }
    }
}

Das Ganze Projekt ist unter https://github.com/pizzadox9999/JSFML zu finden.
Ich wäre euch für etwas Hilfe sehr verbunden.

Mit freundlichen Grüßen pizzadox9999
 

Neumi5694

Top Contributor
Für den Zugriff verwend ich JNA (Java Native Access),

Ints hab ich noch nicht versucht, hin und herzuschieben, bisher waren es immer String-Parameter. Für die stellt man einen Buffer bereit, in den die externe Methode schreiben kann. Die Umwandlung passiert mit der Klasse NativeString.
Beim setzen geht es ganz ähnlich.

Ints zu setzen geht direkter.
Grundsätzlich braucht man das Interface, welches auf das Datenmodell in C verweist und kann dort dann direkt zuweisen.
 

pizzadox9999

Mitglied
Hi, danke für die Antwort. Das mit dem Buffer War der Richtige Tipp für mich. Ich weis nicht wie weit mich das Ganze dann bringt, aber danke erstmal.

PS: Auch wenn ich eigentlich ja die JavaNativeRuntime verwende.
 

pizzadox9999

Mitglied
Hi, ich hab da nochmal ne Frage. Dein hinweis hat ja wirklich gut unter Windows funktioniert, aber wenn ich das jetzt einfach mal unter linux (Manjaro) ausprobiere mit den entsprechenden CSFML so files bekomme ich den Fehler SIGSEV(Segmentation fault). Ich konnte das Problem soweit einschränken, dass das WindowStyle.DEFAULT_STYLE dafür verantwortlich ist. Wenn der ungleich null passierts. Wenn ich null einsetzte geht es.
Könntest du vllt. noch einmal deine Expertise sprechen lassen?
 

Robert Zenz

Top Contributor
Dein hinweis hat ja wirklich gut unter Windows funktioniert, aber wenn ich das jetzt einfach mal unter linux (Manjaro) ausprobiere mit den entsprechenden CSFML so files bekomme ich den Fehler SIGSEV(Segmentation fault). Ich konnte das Problem soweit einschränken, dass das WindowStyle.DEFAULT_STYLE dafür verantwortlich ist. Wenn der ungleich null passierts. Wenn ich null einsetzte geht es.
Welche Oberflaeche? Und, gluecklicherweise kann man das in der Zwischenzeit fragen, X11/X.org oder irgendein Wayland Compositor?

Ich kann mir gut vorstellen dass eine Kombination aus GTK und Wayland da zum Beispiel Probleme hat wenn es darum geht Eigenschaften des Fensters zu setzen. Das ist, im Vergleich zu X11/X.org, eine relativ restriktive Sache geworden, und unter Wayland auch noch Abhaengig vom jeweiligen Compositor/Implementierung.
 

pizzadox9999

Mitglied
So, ich hab KDE (die von plasma :)) und den Xorg server. In den Manjaro Einstellungen steht, dass das Compositing beim start aktiviert wird, sowie das es Anwendungen erlaubt ist, das Compositing zu blockieren.
 

Robert Zenz

Top Contributor
Du koenntest mal ein reines C oder C++ Beispiel probieren ob der Fehler dort auch auftritt wenn du nur ein Fenster mit diesen Parametern erzeugst. Wenn ja, ist es ein Fall fuer SFML weil es ein Fehler dort ist. Wenn nicht, dann stimmt etwas bei deinen Werten/Objekten nicht, vielleicht simpel ein falscher Wert.
 

Neue Themen


Oben