본문 바로가기

전체 글236

앱 리커버리 모드 설계 개발 퍼블리싱 다 혼자하느라 죽을뻔... 주말 출근을 몇 번 연속 한거냐 설계대로 작동하는걸 보면 꽤 뿌듯함. 개발하면서 배운 것도 많고. Javafx에 대한 이해도 높아짐. 2020. 8. 27.
Timeout을 걸고, 시간이 지난 뒤에 작업이 필요할 때 : PauseTransition 예를 들어, 새로운 stage를 열고 특정 시간이 지난 뒤에도 떠있다면 닫고 싶을 때라던지, 특정 시간이 지난 후에 작업이 필요할 때 쓰기 위한 객체 PauseTransition 객체 이름만 보면 뭔가 작업 중지에 대한게 필요할 때를 위한 것임을 알 수 있다. 아래와같이 사용한다. private val delay = PauseTransition(Duration.millis(6 * 1000.0)) 6초로 세팅 init { delay.setOnFinished { println("6초 지나쪙") hideLoading() } } 6초가 지나면 로딩화면이 사라지는 함수를 호출한다. fun showLoading(stage: Stage? = null) { if(loading != null){ hideLoading().. 2020. 7. 17.
try ~ catch의 inline, outline 사이에 exception이 발생하는 case 기본 베이스 코드 fun inline() { try { throw Exception("inline exception") throw NullPointerException("inline exception") } catch(e: NullPointerException) { println("inline에서 null pointer exception발생!!") } catch(e: Exception){ println("inline에서 exception발생!!") } } @Test fun outline() { try { inline() } catch(e: NullPointerException) { println("outline에서 null pointer exception발생!!") } catch(e: Exception).. 2020. 7. 15.
상위제어기 성능 개선 기록 기록이라고 해봐야 내부문서라 코드나 영상을 올릴 순 없지만... 그냥 이러이러해서 몇 초 줄였다는 기록을 위해 가능한 부분만. 상위제어기의 성능 개선을 위한 화면 Update history 20.03.01 | Preload 성능개선 적용 후 테스트 결과 요약 20.07.06 | Jog화면의 구조 개선 적용 후 테스트 결과 요약 20.03.01 | Preload 성능개선 적용 후 테스트 결과 요약 초기화가 끝난 이후 첫번째 하단 메뉴 진입 시의 속도 차이 측정(초) 단위 : 초 WCM TB TW Status Jog Setting 적용 전 3.30 3.02 0.5 2.67 4.75 1.77 적용 후 2.75 0.90 0.5 1.67 1.54 1.20 단축 시간 0.55 2.12 0 1.00 3.21 0.57.. 2020. 7. 6.
javafx node translate(노드의 drag 창 이동) 작업하다보니 javafx의 drag 이벤트 대응 수준이 안드로이드 2.x급인지라... 실무에서 사용하려면 여러가지 고려해야될 것들이 많아 못쓸 것 같지만, 기록으로 남긴다. 아래 예제는 stage안에 popup으로 띄우는 작은 툴팁에 적용한 것이다. root에 setOnMousePressed 이벤트에 클릭한 현재 좌표(screen.x, screen.y)를 저장하고 setOnMouseDragged 이벤트에 translateX로 마우스의 이동 좌표값을 따라간다. 마지막에 오프셋을 갱신하는 이유는, translate가 현재 위치에서의 +- 값으로 이동 좌표가 결정되기 때문에 갱신하지 않으면 it.scrrenX - offsetX의 값이 x^n 이 되어 값이 너무 커져 순간이동이 발생하기 때문이다. 다만, 적용해.. 2020. 6. 24.
Memory leak으로 인한 Full GC Issue 문제 해결 과정에 대한 리포트 파일 결과 요약 원인 비전 property 옵션에 대한 컴포넌트를 그리는 과정에서 메모리 누수 발생 비전에 관련된 두 개의 클래스(A, B)가 있을 때, B에서 화면 및 옵션을 설정하고 B에서 만든 컴포넌트를 A에 add하여 최종적으로는 A를 화면에 그리는 복잡한 구조 A에서 다른 값을 bind한 몇 개의 변수를 포함한 모델정보에 관련된 객체 선언 위 변수를 B의 파라미터로 선언하여 B 클래스 호출 B의 컴포넌트(eg : check box)에 A에서 넘어온 파라미터를 bind A에서 넘어온 파라미터에 대해 B클래스 안에서 Change listener 선언 분석 이중 삼중으로 bind 하고 객체가 선언된 곳이 아닌 다른 곳에서 리스너를 선언하며 JavaFx의 객체 해제 과정에.. 2020. 4. 9.
Commons-lang Commons Lang Commons Lang란 Commons-Lang은 java.lang에 있는 클래스처럼 기능적으로 필요한 유틸리티들을 모아놓은 클래스들의 집합입니다. 아마도 여러분들 역시 직접 유틸리티 클래스들을 만들어 사용하고 있을겁니다. 즉 코딩을 하다보면 이렇거 있었으면 좋겠다 싶은것들이 Commons Lang에 다 있다고 생각하시면 됩니다 II. 다운로드 및 설치 http://jakarta.apache.org/site/downloads/downloads_commons-lang.cgi 에서 다운받자! 설치는 각 어플리케이션의 클래스 패스에 복사합니다. III. org.apache.commons.lang.SystemUtils SystemUtils는 java.lang.System 클래스 처럼 시스.. 2020. 1. 31.
log4j의 logback.xml에 로그 저장경로를 os별로 다르게 하고 싶을 때(janino) log4j는 기본적으로 실행 패키지 안에 logback.xml 파일을 읽게 되어있다. 자동으로 읽기 때문에 크로스 플랫폼을 지원하는 애플리케이션의 경우 해당 파일에 경로를 os별로 구분해야 했다. 처음 아이디어는 build.gradle에 설정을 추가하여 os별로 xml파일을 구분하여 복사하고 빌드하는 것이었는데... 별로 좋지 않은 것 같아 logback.xml에 설정할 수 있는 방법이 있는지 찾아보았다. janino plugin log4j에만 해당되는지는 모르겠으나, xml에 if condition문을 사용할 수 있게 하는 플러그인을 찾았다. 설정은 아래 링크를 참조 https://mvnrepository.com/artifact/org.codehaus.janino/janino Maven Reposito.. 2020. 1. 30.
LoggerFactory 함수에 getLogger() 사용 클래스 이름은 설정하기 쉬운데 함수에만 거는 방법은? fun aa() { val logger = LoggerFactory.getLogger(::aa.javaClass) } 요렇게 쓴다. 함수로 걸림!! 2020. 1. 7.