오랫만에 Flex 글을 적어봅니다


C++ 로 ANE를 만들어서

Flex에 Properties 에서

Flex Biuld Path 에 Native Extensions 라는 탭에서 만든 ANE를 넣고 

코드에서도 해당 ANE를 잘 잡고 ANE의 함수도 잘 인식되었는데

막상 실행해서 해당 함수가 실행되니 아래같은 오류가 발생 했습니다


VerifyError: Error #1014: Class com.wooam::extCaptureWall could not be found.


구글링 해보니 

Flex에 Properties 에서

Flex Build Packaging에 Native Extensions 탭에서

해당 ANE 에 Package 를 체크 하라고 하더군요..


그렇게 하니 해결 되었습니다;;


언제나 하면 할수록 참 오묘한 Flex 의 세계 입니다


FLEX BUILDER 4.6 사용중이고

일반적인 프로그램 개발중에


popupManager를 사용해서 titleWindow 를 사용해서 팝업으로 띄우고 close 시키니 아래와 같은 에러가 나더군요.


TypeError: Error #1009: Cannot access a property or method of a null object reference.


아무래도 팝업창에서 직접 popupManager.removePopup(this) 로 작업해서 그런가 싶어서 


부모객체에 dispatch 로 이벤트 날려서 removePopup 해도 결과는 똑같았습니다



그래서 구글 검색해보니 저런 에러 난사람들이 많더군요...


flex 버그라는 사람도 많고..


일단 결과적으로 땜빵식으로  

focusManager.deactivate(); 

 사용해서 해결했습니다


일단 저렇게 하니 에러는 안나더군요..


팝업이 닫힐때 뭔가 잘못된곳의 focus를 잡으려다가 에러가 나는 것 같습니다



현재 실행중인 프로그램을 강제로 재실행 해줘야 하는 기능이 필요할 때가 있습니다.


역시 구글에 검색해보니 방법이 있네요


일단 원글 출처는 https://forums.adobe.com/thread/951952 입니다


하지만 지워질지도 모르니 여기 적어놓겠습니다.


현재 환경은

Flex 버전은 4.6

AIR 버전은 14.0 입니다

웹이 아닌 Windows 기반 프로그램입니다


내용은 간단합니다.


원하는 곳에 아래 소스를 넣기만 하면 됩니다



  1.           public function Reboot():void  
  2.           {  
  3.                     var app:WindowedApplication = WindowedApplication(FlexGlobals.topLevelApplication);  
  4.   
  5.                     var mgr:ProductManager = new ProductManager("airappinstaller");  
  6.                     mgr.launch("-launch "+app.nativeApplication.applicationID+" "+app.nativeApplication.publisherID);  
  7.                     app.close();  
  8.           }  


import 도 해줘야 되는데...뭐 어차피 ctrl + space 바 누루다 보면 자동 완성되긴 하지만..;;

아래처럼 넣으면 됩니다



  1. import adobe.utils.ProductManager;  
  2.   
  3.           import flash.desktop.NativeApplication;  
  4.   
  5.           import mx.core.FlexGlobals;  
  6.           import spark.components.WindowedApplication;  



그리고 마지막으로 중요한게..


프로젝트명-app.mxml 을 수정해야됩니다. 이거 안하니까 안되더라구요



  1. <allowBrowserInvocation>true</allowBrowserInvocation>  


위에내용이 보통 주석처리 되어있는데 주석 해제하고 true 값 넣어주면 됩니다


위 내용대로 하면 다 되었는데 주의점은 builder에서 debug로 실행하면 작동 안합니다
꼭 release 해서 실행파일일때 실행되어야 재시작 됩니다





개발용 노트북이 윈도우즈 8 64비트 버전인데

Flex를 실행시켜서 빌드를 해보면

항상 아래와 같은 팝업이 뜨면서 빌드가 안되는 문제가 있었습니다.


그래서 저 팝업에 있는 경로를 들어가서 최신버전의 adobe flash player를 설치해도 해결이 안되고..

고민이 좀 있었는데


드디어 해결방법을 찾아냈네요..



우선 저 팝업에 있는 경로를 따라 들어가면 아래와 같은 adobe의 download 사이트가 나옵니다.


경로는 http://www.adobe.com/support/flashplayer/downloads.html#fp10 입니다.


그러면 해당 페이지에서 스크롤을 좀 아래로 내리면

아래 사진같이 다운받을수 있는게 많은데

그중에서 Download the Flash Player for Windows 8 x64 debugger 를 다운로드 하면 됩니다.


전 윈도우 8에 64비트니까 저 파일을 다운받았고..

현재 사용중인 버전에 맞춰서 다운받으면 될 것 같습니다




다운 받고 실행하면 윈도우 업데이트가 설치되는데 재부팅 하고나면 정상적으로 디버깅이 됩니다





플렉스 정규식 관련해서 찾아보다가

정규식을 테스트 할수 있는 사이트를 발견해서 올려봅니다.

일단 주소는 http://ryanswanson.com/regexpt 입니다.


왼쪽바에는 각 예제들이 있고요

중앙 workspace에서 자기 마음대로 테스트 해볼수가 있네요


상단부분에 정규식 값을 넣고

Test Input에  기존 텍스트를 넣으면

우측 output에 결과가 나옵니다


정규식 몇번해봐도 잘 모르겠던데..참 좋은 사이트인거 같아요



사진은 문장에서 첫번째 '-' 값 뒤에 있는 숫자를 '-' 포함해서 가져오는 정규식입니다

정상적으로 실행도 되었고 Error 메시지도 없고 Warning 메시지만 몇개 떴는데


해당 폴더에 release 파일이 생성 안되는 문제가 있었습니다.


다른 프로젝트를 해봐도 동일하고...


혹시나 싶어서 Export 경로를 다른곳으로 지정해주었더니 잘 되네요..


아마도 기존 경로를 디폴트로 두었는데


소스 경로가 사용자폴더에 있어서 쓰기권한이 없어서 Export를 못해줬던것 같습니다 -_-;


쓰기 못했다는 오류도 안나오고 좀 당황스러웠네요




+ Recent posts