2012.06.02 21:52

java3d를 가지고 할게 생겨서 해보는 도중에 계속해서 문제가 생겼다...-_-


구조 파악하는데도 시간이 좀 걸렸지만 이 문제는 정말.....;;;


문제는 RestrictedAccessException 예외가 계속해서 발생하는것이다. 




이 예외는 언제 발생하냐면...


public class RestrictedAccessException

extends java.lang.RuntimeException

Indicates an attempt to access or modify a state variable without permission to do so. For example, invoking a set method for a state variable that is currently read-only.


권한이 없는데도 불구하고 접근하거나 수정하려고 할때 발생한단다(읽기 전용이라서..)...  그리고, 메시지에 보면, 


Group: only a BranchGroup node may be added


브랜치 그룹 노드만 추가될 수 있다...라는데.. 잉? 난 분명 BranchGroup 을 추가 했는데?????


열심히 구글링 해본결과, 이는 성능상의 이유로 컴파일 타임에 브랜치 그룹을 좀 다른 형태의(좀더 랜더링 하기 편한 상태로) 브랜치 그래프로 만든다고 한다. 그래서, 이를 추가하면 브랜치 그룹이 아니라고 하는것이고.....


뭐 성능상의 이유로 이렇게 한다니 뭐 어쩔 수 없다....가 아니라.. 역시 해결책은 있다.


해결책을 찾기 전에 구글링 해보니, setCapability 매서드로 여러가지 옵션을 넣어주는게 있었다. 하지만? 해봐도 소용이 없었다... 왜...왜...ㅠㅠㅠ



더욱 자세한 내막을(...?) 검색해보니, addChild 할때 브랜치그룹들이 컴파일 되는것 같았다. 따라서, addChild 하기 전에 그리기 작업을 해주고, 마지막에 addChild 로 루트 브랜치에 그려주기만 하면된다. 그런데... 여기서 문제가 발생한다. 


그런데, 저렇게 하려면, 새로운 브랜치 그룹을 만들고, 다시 붙이고 하는 작업을 해야하는데, 이는 메모리 낭비가 심해질 수도.... 따라서, 기존의 것은 재활용 하는 방안을 찾아야 한다. 


"? 그냥 붙였던거(addChild) 다시 떼고(detach), 다시 붙이면(addChild) 되잖아..."


그렇다;;;;;;걍 다시 떼어내고, 수정하고 다시 붙이면 된다..ㅋㅋㅋ


그래서 중요한 옵션이 ALLOW_DETACH 가 되겠다. 


<root>

    |

<sub>

    |

[shape]


<>는 브랜치 그룹

[]는 쉐이프.(사이에 트랜스폼그룹이 있어야 하는데, 편의상 생략..)

이렇게 구조가 형성되어 있다면, 


root에게 옵션으로 


rootgroup.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

rootgroup.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);


sub에게도 옵션으로 


subgroup.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);

subgroup.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);

subgroup.setCapability(BranchGroup.ALLOW_DETACH);


를 주면 1단계는 완성!


이제, 런타임시에 그릴때엔...


먼저 시작될때 화면에 그렸다고 치자.


rootgroup.addChild(subgroup);


그다음, 저 서브그룹을 수정할 일이 생겼다!


subgroup.detach(); // 뗴어내기!


// 서브 그룹을 수정하기. <-- 뗴어내서, 수정가능한 상태이다.


rootgroup.addChild(subgroup); // 다시 붙이기.ㅋ





저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 7
  1. Favicon of http://www.jordan4fireredonline.com BlogIcon Jordan 4 Varsity Red 2012.07.24 10:26 신고 address edit & del reply

    http://www.jordan4fireredonline.com 이다. 다른 사람 이 많 아 질 수록 당신 을 전기 공급 을 열 고 닫 는 실제 스크린 에 대한 과잉 의 지방 aquiring 인쇄물 을 들 고 장거리 관리 다.그들 은 물론 원가 보다 非机动 유형 지만 뛰 어 난 부품 은 외부 천창 이다. http://www.jordan4fireredonline.com 이다.

  2. Favicon of http://ione.net/tin-tuc/showbiz/music/2012/07/32576-cong-ty-quan-li-to-nguoc-h.. BlogIcon Scandal hwayoung 2012.08.01 16:54 신고 address edit & del reply

    스캔들 hwayoung

    http://ione.net/tin-tuc/showbiz/music/2012/07/32576-cong-ty-quan-li-to-nguoc-hwayoung-an-va.html

  3. 2012.08.10 10:43 address edit & del reply

    비밀댓글입니다

  4. 2012.08.20 00:08 address edit & del reply

    비밀댓글입니다

  5. 2012.09.06 18:30 address edit & del reply

    비밀댓글입니다

  6. 2012.09.14 10:09 address edit & del reply

    비밀댓글입니다

  7. 2012.09.14 12:04 address edit & del reply

    비밀댓글입니다



티스토리 툴바