내가 성취하려고하는 것이 가능하다면 어떤 도움이 될지 모르겠다. 기본적으로 내가하려고하는 것은 사용자가 서로 경쟁 할 수있는 온라인 체커 게임을 만드는 것입니다. 게임의 논리는 EJB 내부에 있으며 지금까지 제대로 작동합니다. 지금까지 나는 플레이어 - 컴퓨터 게임을 완수했습니다, 그리고 그것은 잘 작동합니다 - 플레이어는 이동의 출발지와 목적지를 선택합니다 (논리가 유효한지 결정하는 동안). 그리고 컴퓨터가 움직이면 보드가 업데이트됩니다. . 그러나 현재 해결해야 할 2 가지 문제가 있습니다. 1) 플레이어가 완료된 후 약 1 초가 지나면 컴퓨터가 움직이기를 원합니다. 그것은 작동합니다 - 그러나 보드가 업데이트되지 않았습니다. (이유에 대해 나중에 설명하겠습니다) 2) 컴퓨터가 움직이면 2 ~ 3 번 깜박 거려야합니다. 'clickImg에jsf 2 지연 + 깜박임 후 빈에서 UI 업데이트
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 '게터는 다음과 같습니다
내 보드에각 사각형은 다음과 같습니다 명령 단추입니다 '함수가 콩 내부에서 어떤 사각형이 이미 선택되었는지 확인합니다. 그렇지 않으면 사각형이 이동의 원점으로 선택되었습니다. 그렇지 않으면 업데이트 된 보드 맵을 반환하는 EJB의 move 함수를 호출 한 후 보드를 업데이트하는 'getImgSrc'함수를 호출 한 다음 업데이트 된 보드의 맵을 반환하는 EJB의 컴퓨터 이동 함수를 호출 한 다음 다시 'getImgSrc'를 호출하여 보드 자체를 업데이트합니다.
그러나, 나는 다음과 같이 타이머를 사용하여 컴퓨터의 이동 함수를 호출하려고하면 -
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
getMachineMove();
}
} , 1000);
'getMachineMove'기능은 두 번째 이후 호출하고, 그 기능은 'getImgSrc',하지만 보드를 호출 업데이트되지 않습니다. 'FacesContext.getCurrentInstance()'가 null을 반환하기 때문에 업데이트되지 않습니다. 내가 충분히 명확했으면 좋았을 텐데. 내가 원했던 경우, 어떤 종류의 도움을 주어도 좋을 것입니다.
건배, eRez
과 같이 항상 확인하십시오. 자세한 답변을 주셔서 감사합니다. 'ScheduledExecutorService'를 아주 쉽게 관리했지만, PrimeFace의 푸시를 구현하려고 시도했을 때 작동하지 않았습니다 (예제는 간단 해 보였지만). 내 대답은 여기에있다 - http://blog.primefaces.org/?p=1440, 내가 GlassFish 3.0을 사용하고있는 것 같습니다. 따라서 JS 내에서 타임 아웃을 구현하려고합니다. – eRez