2016-07-01 7 views
2

Java 8でJavaFXアプリケーションを開発しています。私は、converter-gson 2.1.0でretrofit 2.1.0を使用しています。JavaFXアプリケーションのリビジッド非同期要求を非常にゆっくりと終了する

Patient p = Core.api.getPatient(2).execute().body(); 

すべてが正常に動作しますが、私は非同期バージョンを行う場合:私は同期要求作る場合

Core.api.getPatient(2).enqueue(new Callback<Patient>() { 
    @Override 
    public void onResponse(Call<Patient> call, Response<Patient> response) { 
     System.out.println("DONE"); 
    } 

    @Override 
    public void onFailure(Call<Patient> call, Throwable t) { 
     // Nothing 
    } 
}); 

すべてがも正しくうまくいくと(それが "DONE" 印刷します)。しかし、標準のJavaFXコールPlatform.exit()を使用してアプリケーションを終了すると、UIは終了しますが、アプリケーションの残量はまだ開いており、約40秒後に終了します。

もし私がちょうどSystem.exit(0)を実行すると、すべてが意図どおりに動作するので、これはスレッドの問題かもしれませんが、わかりません。

誰かが間違っている可能性について考えていますか?

EDIT

私が見つけたそのRMI TCP Connection(2)キープ交番のような名前で、Platform.exit()いくつかのスレッドを実行すると、CPUの100%を使用した後。

+0

デーモン 'Thread'のように非同期バージョンをラップすることができます:' Thread th = new Thread(() - > {/ * Async Call here * /}); th.setDaemon(true); th.start(); 'ちょうどアイデア。 – DVarga

+0

@DVarga私は確信していませんが、私は、コールバックがメインスレッドで実行されている間、実際の要求はバックグラウンドスレッドで発生すると思います。編集:私はそれを試して、それは動作しませんでした。 –

答えて

0

OkHttpは、使用後にスレッドを60秒間生き続ける2つのスレッドプールを使用します。ディスパッチャのエグゼキュータでshutdownを呼び出し、接続プールでevictAllを呼び出すことで、強制的にシャットダウンすることができます。

+0

ありがとう!それは確かに解決策でした! –

関連する問題