Uproszczenie przykładowo w Księdze Vaadin
Book Of Vaadin obejmuje rozdział pchania, w tym przykładzie za pomocą Vaadin Charts.
Poniżej znajduje się mój kod. Bazując na powyższym przykładzie Vaadin Charts, uprościłem go, zastępując użycie obiektu Chart
prostym obiektem Label
. Etykieta aktualizuje się co sekundę, informując o aktualnej godzinie.

Na przykład użycie Only - Użyj Executor w projekcie świecie rzeczywistym
zastrzeżenie: Mój przykład poniżej jest zbudowany dla uproszczenia, nieprzeznaczonych jako kod produkcji. Spanie w wątku to prosty i niezręczny sposób na zarządzanie zaplanowaną pracą gwintowaną. Java zapewnia obiekt Executor
dla tego rodzaju pracy. W projekcie realistycznym użyłbym raczej obiektuniż pojedynczego obiektu do spania, aby zaplanować nasze zadanie (opowiedzenia o czasie). Powiązana wskazówka: Nigdy nie używaj urządzenia Timer
w środowisku serwletu. Aby uzyskać pełniejszy i bardziej realistyczny przykład, zobacz my Answer na podobne pytanie dotyczące Push z Vaadin.
wziąłem inne skróty w tym przykładzie, takie jak: I miejsce widget Label
bezpośrednio na UI
podczas pracy w świecie rzeczywistym użyłby Layout
zawierać Label
.
Moja konfiguracja
Mój kod używa Vaadin 7.3.7 Java 8 Update 25 w NetBeans 8.0.2 i Tomcat 8.0.15 na Mac OS X 10.8.5 (Mountain Lion).
Technologia Push jest stosunkowo nowa, szczególnie odmiana WebSocket. Należy używać najnowsze wersje serwera WWW, takich jak ostatnich aktualizacjach Tomcat 7 lub 8.
Sposób korzystania z tego przykładu
Ten kod jest pojedynczy plik, plik MyUI.java
. Aby użyć tego kodu:
- Utwórz nową domyślną aplikację Vaadin w swoim wybranym IDE.
- Ten przykład działa pomyślnie, przed modyfikacją.
- Wymień zawartość klasy
MyUI
za pomocą poniższego kodu.
@Push
Adnotacja
Obok kodu w środku, trzeba pamiętać, jak dodaliśmy @Push
adnotacji definicji MyUI
klasy.
Przykładowy kod
package com.example.pushvaadinapp;
import com.vaadin.annotations.Push;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.annotations.Widgetset;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Label;
import com.vaadin.ui.UI;
import javax.servlet.annotation.WebServlet;
/**
* © 2014 Basil Bourque. This source code may be used freely forever by anyone absolving me of any and all responsibility.
*
* +----------------------------+
* | NOT FOR PRODUCTION USE! |
* +----------------------------+
* Sleeping threads is an awkward way to manage scheduled background work.
* By the way, never use a 'Timer' in a Servlet environment.
* Use an Executor instead, probably a ScheduledExecutorService.
*/
@Push
@Theme ("mytheme")
@Widgetset ("com.example.pushvaadinapp.MyAppWidgetset")
public class MyUI extends UI
{
Label label = new Label("Now : ");
@Override
protected void init (VaadinRequest vaadinRequest)
{
// Put a widget on this UI. In real work we would use a Layout.
setContent(this.label);
// Start the data feed thread
new FeederThread().start();
}
@WebServlet (urlPatterns = "/*" , name = "MyUIServlet" , asyncSupported = true)
@VaadinServletConfiguration (ui = MyUI.class , productionMode = false)
public static class MyUIServlet extends VaadinServlet
{
}
public void tellTime()
{
label.setValue("Now : " + new java.util.Date()); // If Java 8, use: Instant.now(). Or, in Joda-Time: DateTime.now().
}
class FeederThread extends Thread
{
int count = 0;
@Override
public void run()
{
try {
// Update the data for a while
while (count < 100) {
Thread.sleep(1000);
// Calling special 'access' method on UI object, for inter-thread communication.
access(new Runnable()
{
@Override
public void run()
{
count ++;
tellTime();
}
});
}
// Inform that we have stopped running
// Calling special 'access' method on UI object, for inter-thread communication.
access(new Runnable()
{
@Override
public void run()
{
label.setValue("Done.");
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Szanowny Panie Głosicielu: Proszę zostawić krytykę wraz z głosowaniem. –