Programming 72

Undo/Redo 기능 추가 StyledText

delta 값 기록 방식이 아닌 전체 이미지 저장하는 방식이라 커서 위치 복원 문제나 메모리 과다 사용 문제가 있을 수 있다. event listener를 이용해 caret pos, replaced text, replacing text 등을 얻어와 처리할 수는 있을 것 같다. import java.util.LinkedList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ExtendedModifyEvent; import org.eclipse.swt.custom.ExtendedModifyListener; import org.eclipse.swt.custom.StyledText; import org.eclip..

Multithread 환경에서의 JDBC 사용

thread 를 이용해 여러개의 connection을 생성해 DB에서 읽어온 데이터를 가지고 작업할 일이 있었으나, jdbc 가 thread-safe 하지 않아서 인지 자꾸 오류가 나는 것이었다. (분명 다른 connection인데 같은 statement, resultset 를 생성하여, 더이상 읽어온 값이 없다는 오류를 뱉는 둥...) 최대한의 동시성을 유지하면서 무결성이 깨지지 않는 동기화 수준을 정리할 필요성을 느낌... [Connection] - DriverManager 수준 synchronized(DriverManager.class) { conn = (Connection)DriverManager.getConnection(jdbcUrl, dbProp); } [Statement, PreparedSt..

Programming/Java 2011.11.02

View Close Event (pre-closing)

[Pre-closing] View 닫기 전에 체크... implements ISaveablePart2 해준후, interface 메소드 구현하도록 추가한 후, public boolean isDirty() public boolean isSaveOnCloseNeeded() 위 두개는 true 를 리턴하도록 수정하고, public int promptToSaveOnClose() 를 재정의 해주면 된다. http://e-rcp.blogspot.com/2007/09/prevent-that-rcp-editor-is-closed.html [Post-closing] View 활성화 및 닫은 후 체크 IPartListener

Producer/Consumer 예제

두 곳의 데이터 소스에서 입력을 받는 동안 사이사이 두 입력값의 동일성을 비교해서 화면에 나타내려고 할 때 사용한 Thread 처리 방식이다. Consumer는 데이터가 없으면 대기하다가, Producer가 데이터를 입력해서 생기면 비교하고 결과를 리턴하는데, 종료 처리는, 두개의 Producer가 생성을 마쳤는지를 검사하다가 interrupt 하게 된다. 쉽게 말해, 두 명의 제빵사가 빵을 만들고 빵 나올때까지 손님이 기다리는 상황인데 빵이 나오면, 손님은 빵을 바로 집고 또 기다린다. 두 명 모두 빵을 다 찍어내면(영업 끝나면) 손님보고 나가라고 interrupt 한다. [Main.java] package pc; public class Main { public static void main(Strin..

Programming/Java 2011.06.20

ListView, TreeView 처리 정리

* 선택항목 얻기 IStructuredSelection sel = (IStructuredSelection)treeViewer.getSelection(); sel.getFirstElement() * deprecated 된 TableTreeViewer를 TreeViewer로 구현하기 tree - treeViewer - treeColumn - treeColumn 과 같이 만들어 두고, ITreeContentProvider, ITableLabelProvider 를 상속받은 Provider들로 설정해주면 된다. 주의할 점은 TreeColumnViewer 를 사용하면 안된다는 것이다!!! 이것은 오직 LabelProvider 를 써서 column 단위의 처리는 하지않아 오류가 나올 것이다.

SWT Subclassing

몇가지 이유로 SWT 에서 Subclassing 이 금지된다고 한다. (has-a 관계로 이용하도록 권장하는 듯 하다) http://www.eclipse.org/swt/faq.php#subclassing RCP 개발중 Main ToolBar(CoolBar)에 콤보박스를 추가할 일이 있었는데, setWidth 나 어떠한 방법을 이용해도 ToolBar에서 크기가 고정되는 것이었다. 호출 구조를 따라가다 보니 Combo 사이즈를 미리 정해주는 법 밖에 방법이 없었다. 아래와 같이 computeSize 및 checkSubclass 를 재정의 해 주었다. protected Control createControl(Composite parent) { combo = new Combo(parent, SWT.READ_ON..

Key Binding 바꾸기

기존 binding은 org.eclipse.ui.contexts.window 을 통해 이루어 진다. 1. 새 context 를 생성하여 parentId 를 org.eclipse.ui.contexts.window 로 함 2. org.eclipse.ui.bindings 에 새 key binding 추가 - contextId를 새로만든 contextId 로 지정하고 commandId 를 적절히 지정한다. (연결할 command) 3. context 를 바꿔줘야 한다. (기존 책이나 pdf 등에 나오질 않음) - workbench 가 생성된 이후에 아래 코드를 호출하여 바꿔준다. PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { public v..

XML-RPC Java / Android 개발 환경 구축

XML-RPC Spec. http://www.xmlrpc.com/ Apache XML-RPC Java Lib. http://ws.apache.org/xmlrpc/ Android XML-RPC Lib. (Java) http://code.google.com/p/android-xmlrpc/ ws-commons-java5-1.0.jar (JDK 5 이전 버전에서 JDK 5의 클래스를 이용하기 위한 class) http://mirrors.ibiblio.org/pub/mirrors/maven2/ws-commons-java5/ws-commons-java5/1.0/ws-commons-java5-1.0.jar Retrotranslator (JDK 5 이후 class, jar 들을 이전 버전 호환으로 만들어 주는 툴) h..