私が達成しようとしていることがすべて可能であるかどうかわからないので、助けていただければ幸いです。 私が基本的にしようとしているのは、ユーザーがお互いに競い合うことができるオンラインチェッカーゲームを作ることです。ゲームのロジックはEJBの内部にあり、これまでのところうまく動作します。これまでのところ、私はプレーヤーのコンピュータゲームを完成させました。そして、それはうまくいきます - プレイヤーは移動の起点と目的地を選びます(論理が有効かどうかを決定しながら)、その後コンピュータが移動し、 。 しかし、現在解決したい2つの問題があります。 1)プレイヤーが完了してから約1秒後にコンピュータの動きが発生します。それは動作します - しかし、ボードは更新されません(私は後で説明します) 2)コンピュータが移動した後、私は影響を受ける四角形を数回点滅させたい。私のボード上のjsf 2遅れ+点滅後のBeanからUIを更新
、各正方形は次のようになりますコマンドボタンです:「clickImgで
public String getImgSrc()
{
FacesContext fc = FacesContext.getCurrentInstance();
UIComponent c = UIComponent.getCurrentComponent(fc);
String cID = c.getId();
String output = "/resources/EMPTY_BOX.jpg";
String currOption = gameBoard.get(cID);
if (currOption != null)
{
output = "/resources/" + currOption + ".jpg";
}
return output;
}
:私の豆で
<h:commandButton id="B1" image="#{CodeBean.imgSrc}" actionListener="#{CodeBean.clickImg()}" action="#{CodeBean.update}" onmouseover="this.src='#{CodeBean.overImgSrc}'" onmouseout="this.src='/CheckersClientSide#{CodeBean.imgSrc}'">
<f:ajax render="@form" />
</h:commandButton>
、 'IMGSRC' ゲッターは、このようになります'関数がBeanの内部にあるかどうかを確認します。そうでない場合は、正方形が移動の起点として選択されたことがわかります。それ以外の場合は、更新されたボードマップを返すEJBのmove関数を呼び出します。その後、ボードを更新する 'getImgSrc'関数を呼び出し、次に更新されたボードのマップを返すEJBのコンピュータ移動関数を呼び出します私は 'getImgSrc'をもう一度呼び出し、ボード自体を更新します。
しかし、私はこのような、タイマーを使用して、コンピュータの移動機能を呼び出そう -
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
getMachineMove();
}
} , 1000);
「getMachineMove」関数が第二の後にコールされ、その機能は「getImgSrc」が、ボードを呼び出します更新されません。 'FacesContext.getCurrentInstance()'がnullを返すため、更新されません。 私は十分にはっきりしていることを願っています。私がいた場合は、何らかの助けに感謝します。
歓声、 エレズ
)詳細な回答はありがとうございます。 私は 'ScheduledExecutorService'を非常に簡単に管理していますが、PrimeFaceのプッシュを実装しようとしたときに、それはうまくいきませんでした(例は単純ですが)。私は答えがここにあると思う - http://blog.primefaces.org/?p=1440、私はGlassFish 3.0を使っている。 したがって私はJS内でタイムアウトを実装しようとします – eRez