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%を使用した後。
デーモン 'Thread'のように非同期バージョンをラップすることができます:' Thread th = new Thread(() - > {/ * Async Call here * /}); th.setDaemon(true); th.start(); 'ちょうどアイデア。 – DVarga
@DVarga私は確信していませんが、私は、コールバックがメインスレッドで実行されている間、実際の要求はバックグラウンドスレッドで発生すると思います。編集:私はそれを試して、それは動作しませんでした。 –