2016-04-09 12 views
0

私はシステム間で通信するためにREST(ジャージー)とHibernateを主に使用するクロスプラットフォームアプリケーションの一部を書いています。私はJavaFXの初心者ですが、私の側はユーザーからの入力値を取得するためにそれを使用しなければなりません。私は要求を送信した場所の一つでこの場合の戻り値の取得方法は? (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 
... 

}} 

を:ここでは、コードの流れがどのように見えるかです

@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(); 
}} 

JavaFXのクラスは、アプリケーションを拡張し、そしてI(無効)startメソッドをオーバーライドします私が表示したいウィンドウとボタンをクリックした後(入力があればOK)、ウィンドウを閉じます。

考え方は、応答が戻ってくるまで待つ必要があるということです(ユーザーが何も入力しなかった場合、いくつかのデフォルト値が返される可能性があります)。入力値と比較します。これにより、同期が保証されます。

JavaFXクラス内でRESTやデータベースの保存をもっと使用すると、startMethodで値を使用している(おそらくそうでない)ときに値があることを確認できません。 。

私は何ができますか?私はjavafxのコールバックメソッドについて多くのことを知っていない、それらはここで私を助けることができますか?ありがとう!

+0

サーバー側にウィンドウを表示しようとしていることはあまり意味がありません。たぶん、あなたのデザインを考え直す必要があるかもしれないし、多分あなたのシステムコンポーネントがどういったものになっているかをもっとよく理解するために時間を取る必要があります。 –

+0

これはRESTを選択しました。アプリケーションはIoTデモであり、定期的にセンサリーディングが行われます(私たちの3人はプログラマそのものではなく、電気工学の学生です)。 –

+0

それは理にかなっていますが、あなたのデザインは1)クライアントウィンドウを表示するようにすべきです。 2)ウィンドウへのユーザー入力。 3)クライアントアプリケーションはRESTサーバーに入力を送信します。 4)RESTサーバーが応答を送信する5)クライアントが応答に応答する –

答えて

0

最後に、JavaFXClassをResourceクラスに移動しました。意味リソースクラスはアプリケーションを拡張し、startをオーバーライドします。doSomethingMethodでは、try-catchブロックで起動を呼び出し、必要に応じてIllegalStateExceptionをキャッチし、代わりにstart()を呼び出します(try-catchブロック内でも)。テキストフィールドの入力値は、後にグローバル変数に格納されます。

また、start()メソッドではPlatform.setImplicitExit(false); です。したがって、doSomethingMethod()は問題なく何度でも呼び出すことができ、javaFXウィンドウを開始します。それはかなりの解決策ではありません。

関連する問題