Diskuze: Hra
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Změň v run() metodě volání metody render(). Překreslování GUI nemůžeš volat ve vláknech obyčejným způsobem. Ve swingu jsem z vlákny nepracoval, ale takhle by to mělo funguje. Já jsem to dělal v JavaFX a tam je Aplication.RunLater(...)
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
render();
}
});
Více zde: Threading with swing
Skutečně to nyní funguje jak má. Díky.
Jen nechápu proč to nefunguje, protože ve hře, co jsem dělal podle návodu
byli metody run() i render() naprosto stejné, a žádné
SwingUtilities.invokeLater() tam nebylo.
Tím, že jsem si do programu vložil na různá místa postupně metody
println() jsem zjistil, že problém je v metodě render konkrétně v příkazu
canvas.createBufferStrategy(3). To jsem spouštěl přes "debug". Když jsem
to spustil přes "run", tak došlo k vyjímce "xception in thread "Thread-1"
java.lang.IllegalStateException: Component must have a valid peer" na tom
samém příkazu. Nejde to vyřešit ještě jinak? Neví někdo?? Jak říkám,
u jednoho návodu vůbec žádná metoda invokeLater() použitá nebyla a
přesto to fungovalo...
Zobrazeno 4 zpráv z 4.