2016-05-04 7 views
0

Obwohl ich dies nicht als Vaadin spezifische Frage denke. Alles, was ich wirklich tun muss, ist wieder in den Thread, den die Zukunft nach Abschluss erstellt.Wie kann ich den ursprünglichen Thread beim Abschluss asynchron wiederherstellen?

(ClickHandler) (event) -> { 
    log().debug("current Thread {}", Thread.currentThread().getId()); 
    viewModel.generateFileDownload().thenAccept(this::download); 
    // needs to continue to this immediately, note: there are similarly vaadin reasons why you can't just block here. 
    button.setEnabled(false); 
} 


private void download(final File file) { 
    // do stuff that needs to happen in the original thread 
    log().debug("current Thread {}", Thread.currentThread().getId()); 

    button.setEnabled(true); 
} 

Ich brauche diese Thread-ID, um die gleiche zu sein, offensichtlich kann ich dies überarbeiten. Ich weiß, dass es einen Beitritt gibt, aber jetzt sicher, wie mir das hilft, wenn ich nicht bis zum Abschluss wieder zusammen kommen will?

+0

Nun, Sie können nicht. Einen Thread zu "verbinden" hat eine andere Bedeutung als das, worüber du sprichst. Der Rückruf wird in einem eigenen Thread ausgeführt. Wenn es im Ursprungs-Thread etwas zu tun gibt, müssen Sie eine Future-Schnittstelle verwenden, nicht einen Abschluss-Callback. – EJP

+0

@EJP und wie würde ich das tun? – xenoterracide

+0

Ich glaube, Sie suchen nach https://vaadin.com/docs/-/part/framework/advanced/advanced-push.html –

Antwort

0

Für Ihr spezielles Problem sollten Sie einfach

Button button = new Button("Download"); 
button.setDisableOnClick(true); //after creating the button 

und

button.setEnabled(true); //after using the button, in click handler 

verwenden Hinweis, dass dies ein Merkmal in Button ist. Für fortgeschrittene Fälle sollten Sie @Push Feature von Vaadin verwenden.

Verwandte Themen