2016-04-09 10 views
0

Ich schreibe einen Teil einer Cross-Plattform-Anwendung, wo wir hauptsächlich REST (Trikot) und Hibernate für die Kommunikation zwischen Systemen verwenden. Ich bin neu in JavaFX, aber meine Seite des Programms sollte es verwenden, um Eingabewerte von Benutzern zu erhalten. Hier ist, wie der Code Fluss aussehen:Wie erhalten Sie in diesem Fall den Rückgabewert? (Java FX)

public class startingClass{ 

... 

public void startingMethod(Payload payload){ 

//send REST requests to different places with different payloads, like: 
Response response = Utility.sendPostRequest(URI, payload2); 
something = response.readEntity(something.class) 
//more processing with the returned values 
... 

}} 

In einer der Orte, an denen ich eine Anfrage gesendet:

@Path("something") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8") 
public class Resource{ 

... 

@POST 
@Path(something) 
public Response doSomething(Payload payload) { 
    //show JavaFX window with text fields and an okay button 
    JavaFXClass.launch(JavaFXClass.class); 

    /* THIS IS WHERE I would need to get back the input values somehow */ 

    //payload3 has the input values I need to send back 
    return Response.entity(payload3).build(); 
}} 

Die JavaFX-Klasse erweitert Anwendung und und überschreibt die (void) starten Methode, wo ich stelle das Fenster zusammen, das ich zeigen möchte und klicke auf den Button (wenn die Eingaben in Ordnung sind) schließe ich das Fenster.

Also die Idee ist, dass die startingMethod warten müsste, bis die Antwort zurückkommt (vielleicht mit einigen Standardwerten zurück, wenn der Benutzer nichts für eine Minute eintippt - was wäre die elegante Lösung dafür?) mit den Eingabewerten. Dies würde die Synchronisierung garantieren.

Wenn ich mehr REST oder Datenbank speichert innerhalb der JavaFX-Klasse, dann kann ich nicht sicher sein, die Werte sind da bis ich sie in der startingMethod (wahrscheinlich nicht) verwenden und es ist wahrscheinlich eine wirklich schlecht aussehende Lösung .

Was könnte ich tun? Ich weiß nicht viel über Callback-Methoden in Javafx, können mir diese hier helfen? Vielen Dank!

+0

Es macht nicht viel Sinn, dass Sie versuchen, ein Fenster auf der Serverseite zu zeigen. Vielleicht müssen Sie Ihr Design überdenken oder vielleicht sogar etwas Zeit in Anspruch nehmen, um besser zu verstehen, wie all Ihre Systemkomponenten zusammenpassen. –

+0

Wir haben REST dafür gewählt, weil wir das etwas kennen. (Und es ist möglich auf einem Raspberry 3) Anwendung ist eine IoT-Demo mit periodisch eintreffenden Sensormesswerten. (Die 3 von uns sind keine Programmierer an sich, nur Studenten der Elektrotechnik.) –

+0

Das ist sinnvoll, aber Ihr Design sollte eher wie 1) Client-Fenster anzeigen. 2) Benutzereingaben in Fenster. 3) Die Client-App sendet eine Eingabe an den REST-Server. 4) REST-Server sendet Antwort 5) Client reagiert auf Antwort –

Antwort

0

Am Ende habe ich die JavaFXClass in die Resource-Klasse verschoben. Bedeutung Die Ressourcenklasse erweitert die Anwendung, überschreibt den Start usw. In der doSomethingMethod-Anweisung starte ich in einem try-catch-Block, fange die IllegalStateException bei Bedarf auf und rufe stattdessen start() auf (auch in einem try-catch-Block). Die Textfeldeingabewerte werden in einer globalen Variablen gespeichert.

Auch in der start() Methode habe ich Platform.setImplicitExit(false); so kann die doSomethingMethod() mehrere Male ohne ein Problem aufgerufen werden, das Starten des javaFX-Fensters. Es ist keine schöne Lösung.