요즘 자바의 Graphics을 이용하여, 유틸리티를 만들고 있습니다.


drawImage 함수의 경우 제목 표시줄을 제외하고 


실질적은 Graphics 프레임 영역에서 부터 0,0이 시작됩니다.


그런데 drawString은 제목 표시줄의 영역부터 0,0이 시작됩니다.


그래서 drawString을 0,0내 찍으면 제목표시줄에 가려서 보이지가 않습니다.



그냥 Y 좌표에 대략적으로 +10, +12 정도 주고 사용해도 되겠지만,


자바의 특성상 다른 OS에 갔을때 제목표시줄의 크기가 변할것 같은 찜찜함에 


해결 방법을 찾아봤습니다.


https://stackoverflow.com/questions/45227294/setting-drawstring-so-0-0-is-inside-the-draw-area

에서 해법을 찾았습니다.


기준의 위치를 바꿔주면 됩니다.



  FontMetrics fm = g.getFontMetrics();

    g.translate(0, fm.getAscent());

   

    Font font = new Font ("font/NanumBarunGothic.ttf", Font.PLAIN, fontSize); 

    g.setColor(color);

    g.setFont (font);

    g.drawString(str, x, y);

   

   

    g.translate(0, 0);


위와 같이 기준점을 fm.getAscent() 함수를 이용해 변경해서 drawString 글자를 찍고


다시 원래대로 g.translate(0, 0); 돌려줍니다. 


위와 같은 방법으로 문제를 해결했습니다.




신고


data_string.replaceAll("<script([^'\"]|\"[^\"]*\"|'[^']*')*?</script>", "");


해당 구문을 이용하여 문자열에 포함된 스크립트 부분을 삭제하려했다.


원래 저 정규식은 자바스크립트에서 많이들 쓰는 정규식이라 

그대로 자바로 바꿨을 뿐인데 아래와 같은 에러가 뿜뿜.



정규식을 처리하기 위해 재기호출을 미친듯이 하다가 그냥 넘쳐버린듯 하다.


다시 열심히 검색해보니,


Pattern과 Matcher 를 이용하는 방법을 찾을수 있었다.



                                                // 스크립트 제거

Pattern SCRIPTS = Pattern.compile("<script([^'\"]|\"[^\"]*\"|'[^']*')*?</script>",Pattern.DOTALL);

Matcher m;

m = SCRIPTS.matcher(data_string);

data_string = m.replaceAll("");




위와 같이 응용후 에러가 해결되었다.



신고

$ is not defined 오류가 나타나는 것은 jQuery 가 제대로 로드 되지 못해서 그렇습니다.


해결 방법은 <head> </head>  안에 


<script type="text/javascript" src="경로"></script> 를 추가해 주시면 됩니다.



경로 부분엔 당연히 jQuery 경로가 들어가야겠죠?




아래는 제가만든 코드의  제이쿼리 로드 예제입니다.


 <!-- jquery load -->

 <script type="text/javascript" src="vendor/jquery/jquery.js"></script>



쉽죠? 




신고


이번에 아파치 웹서버를 nginx로 변경했는데 위와같은 에러로그가 많이 쌓였어요.

해결 방법은


#vi /etc/nginx/conf.d/default.conf 

 

location ~ \.php$ {

    root           /usr/share/nginx/html;

    fastcgi_pass   127.0.0.1:9000;

    fastcgi_index  index.php;

    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

    fastcgi_max_temp_file_size 0;

    fastcgi_buffer_size 4K;

    fastcgi_buffers 64 4k;

    include        fastcgi_params;

}



굵은 글씨 부분 추가 하시면 됩니다.



신고



회사 컴퓨터를 포멧하고 windows 8 을 설치후 이클립스를 실행하니 위와 같은 오류가 발생합니다. 


해결방법은 이클립스 폴더내에 eclipse.ini 파일에 -vm 옵션을 추가해 줍니다. 






위와 같이 eclipse.ini 에 -vm 옵션을 추가해 줍니다.

경로는 꼭 사용자 PC에 자바가 설치된 경로를 잘 지정해 주셔야됩니다. 



그리고 실행하면 바로 실행이 됩니다. 










신고

1. 주소창에 "about:flags" 입력후 엔터


2. 기능중에 Impl-side 그리기 Mac, Windows, Linux, Chrome OS, Android 기능  사용중지 상태로 변경후 크롬 재시작









이렇게 하면 GIF 로딩해도 크롬이 버벅이지 않네요 ^^






신고
  1. G.J. 제이 2015.02.16 14:01 신고

    크롬을 이용하진 않지만... 좋은ㄴ팁 감사합니다.

  2. 2015.02.17 11:31

    비밀댓글입니다

    • 적샷굿샷 2015.02.23 10:17 신고

      이메일 주소가 있어야지 초대장을 보내드릴수 있습니다.

      이메일 주소 댓글로 부탁드립니다. ^^

  3. 드래곤포토 2015.02.18 11:08 신고

    희망과 덕담을 나누는
    행복하고 즐거운 명절 보내시기 바랍니다. ^^




오랜만에 블로그 포스팅을 하게 되네요 ^^
그간 이직 하고 하고 싶던 프로그래밍 원없이 했습니다.

이제좀 프로그래머로서의 삶을 다시 사는 느낌이네요.

이번 프로젝트 진행중에 발생한 문제를 해결하며
메모차원에서 포스팅을 남겨둡니다.

한글을 전송함에 있어서 여러 가지 문제점들이 많이 발생하는것은 모두들 아실텐데요.
웹게임을 만들면서

DB -> java 데몬 -> javaScript 로 데이터를 전송하며 모두 UTF-8 로 처리했지만
어김없이 한글 깨짐 현상이 발생했습니다.

아마도 DB->java 데몬 으로 옮겨 오면서 UTF-8 처리가 제대로 되지 않은걸로 추측됩니다.



이문제에 대해서 해결한 방법을 아래에 적었습니다.
 java
 URLEncoder.encode("한글","UTF-8")
 URLDecoder.decode("한글","UTF-8")


java script
 function urldecode (str) { 
    return decodeURIComponent((str + '').replace(/\+/g, '%20'));  // 공백 문자인 + 를 처리하기 위해 +('%20') 을 공백으로 치환
  }
위와 같이  URL 엔코더와 디코더를 이용해서 문제를 해결했습니다.




URL 엔코더의 경우 주로 검색창에 한글로 검색했을 경우
검색된 페이지의 url을 보시면 "검색+한+글자" 와 같은 것을들 자주 볼수 있었을 텐데요.

URL로 엔코딩후 다시 디코딩을 하면 공백에 + 기호로 처리되어 위의
java Script 에서도 + 기호가 모두 들어간채로 디코딩 되었습니다.

그래서 위와 같은 함수를 만들었습니다.
핵심은 decodeURIComponent((str + '').replace(/\+/g, '%20'));  // 공백 문자인 + 를 처리하기 위해 +('%20') 을 공백으로 치환
이부분 입니다.

+를 만나면 그냥 공백으로 치환해 버리는거죠 '%20' <-- 요놈이 + 기호 입니다.

좀 불편하긴 하지만 한글이 깨지지 않고 다른 언어들 간에 전송을 할수 있는 방법으로는
이방법이 제일 안전하고 괜찮아 보입니다.


저도 인터넷 뒤져가며 배우고 만든거라 다시 인터넷으로 돌려드릴겸
그리고 다음에 또 사용할때를 대비해서 메모도 해둘겸 포스팅을 남깁니다.

모두들 유용하게 이용하시길 ^^








신고
  1. gsbob 2012.06.27 14:46 신고

    감사합니다.
    문제가 말끔히 해결됐네요 ㅎㅎ

    이 내용 참고해서.. 블로그에 포스팅좀 해도 되죠??^^

    • 적샷굿샷 2012.06.28 15:20 신고

      해결되셨다니 다행이네요

      출처만 밝혀주신다면
      어디든 퍼가셔도 좋아요 ^^

+ Recent posts