* 개요 이클립스에서는 잘 되던 getClass().getResourceAsStream() 구문이 jar 로 하면 null 반환하여 오류 유발하는 현상 * 원인 여기서 사용하는 경로는 class path 다. 그전에 src 내의 경로를 사용하고 있었다면 ( ./abc.txt ) jar 로 export 후의 경로랑은 달라진다. * 해결 1. 경로를 "현재 Java 파일 패키지 경로/abc.txt" 로 바꿔주면 된다. src 같은 경로는 제외한 class path EX : /com/myprj/module/abc.txt - 하지만 이렇게 가져온 InputStream 은 다음 오류를 반환했다. java.io.IOException: mark/reset not supported 2. 따라서 이 문제까지 해결 위해서..
* 개요 모든 소스에 다음 빨간줄 쳐지고 다음 오류 The declared package does not match the expected package src.main.java * 해결 https://stackoverflow.com/questions/6997524/the-declared-package-does-not-match-the-expected-package 이유없이 꼬여서 그런경우 있음 프로젝트 닫았다가 열면 해결
* 개요 gradlew war 했는데 어디서도 war 파일 이 없다 * 로그 추적 실행> gradlew war --info Initialized native services in: C:\Users\dellw\.gradle\native ... 중간 생략 ... > Task :war SKIPPED Skipping task ':war' as task onlyIf is false. :war (Thread[Execution worker for ':',5,main]) completed. Took 0.0 secs. BUILD SUCCESSFUL in 3s 2 actionable tasks: 2 up-to-date war task 가 skipped 이라네.. * 해결 build.properties 에 다음 코드 추가 ..
* 개요 gradlew war 실행중 다음 오류 보이며 실패 Execution failed for task ':compileJava'. > Could not load class 'com.sun.tools.javac.api.JavacTool - 그 전에 봤던 Unable to locate tools.jar. 이런 메시지도 마찬가지 * 원인 JDK 가 안 깔림. 혹은 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_05 이 환경변수에 설정되어 있어야 하는데 되어있지 않음. * 해결 - JDK 설치 JRE 만 설치되어있어도 설치하려고 하면 'JDK 설치되어 있다' 는 메시지 나오면서 설치가 안 되는데 속으면 안돼. jdk 로 시작하는 폴더 없다면 프로그램 삭제에서 자바 지우고 다시 삭..
* 개요 Properties 사용시 java.io.IOException: java.io.FileNotFoundException: air.properties (지정된 파일을 찾을 수 없습니다) * 해결 FileInputStream fis = new FileInputStream(fileName); 을 다음으로 대체 getClass().getResourceAsStream(fileName)); properties 파일이 java 파일과 같은 폴더에 있고 파일명만 명시한다면 FileInputStream 이 아니라 getClass()... 에서 가져와야 .. https://stackoverflow.com/questions/6696583/path-of-properties-file-in-java
* 개요웹앱 구동 중 java.lang.ClassFormatError: Truncated class file 오류 발생 해당 앱 구동하는 리눅스 에서는sda5 : write failed, user block limit reached오류 발생 * 환경웹 호스팅Linuxtomcat 6.0.0.29java 1.6.X * 원인 1 - 하드 용량 문제위 오류는 class 파일에 오류 있을때 발생. - 나의 경우 웹 호스팅 에서 제공하는 용량을 다 써서 war 이 완벽하게 압축 해제 되지 않음.이런 경우FileNotFoundException 발생하기도 함. linux> quota명령으로 용량 한계 확인 가능.(또는 웹 호스팅 서비스 업체에서 제공하는 조회기능 이용) 웹 호스팅 환경에서 df 명령으로는 불가 - 해결..
* 개요org.apache.commons.net.ftp.FTPClient * FTPClient#enterLocalPassiveMode()- FTP 의 액티브 모드와 패시브 모드에 대해서 알아야 함https://extrememanual.net/3504https://idchowto.com/?p=10045 - 액티브 모드 : 클라이언트가 서버에 데이터 전송 요청하면서버가 클라이언트에 접속해 파일을 올려줌 - 패시브 모드 : 클라이언트가 서버로부터 데이터를 내려받음 - 액티브 모드일때는 클라이언트가 정해준 특정 포트로 서버가 데이터를 전송해주는 것이므로 클라이언트에 방화벽이 있다면 서버가 접근할 수 없음. * 인코딩 문제client.setControlEncoding(FTP서버 인코딩); FTP 서버의 인코딩이 ..
* 개요 - 자바에서 EUC-KR 과 UTF-8 을 사용시 비교함. - 인코딩에 관한 기본 개념은 생략 - 몇년전에도 정리했었고, 어떻게 보면 뻔한 내용이지만 헷갈릴때가 많아서(또는 모르는데 그냥 때려 맞춰서 쓰다보니) 정리함 - '인코딩' 이란 말이 "File system 에 저장되는 방식" 일 수도 있고"특정 툴에서 파일을 읽어 오거나, 문자를 다루는 방식" 일 수도 있고"인코딩 방식을 다른 인코딩 방식으로 바꾸는 과정(인코딩 변환)" 일 수도 있다는 점에 유의해야 함. * 환경Eclipse * 참고 "안녕" 이라는 한글을 다음 코드로 byte 로 나눠 출력하면 String sHi = "안녕";for(byte b : sHi.getBytes()) {System.out.println(b);} euc-kr..
* 개요FTPClient storeFile() 실행해도 아무 반응 없고언제나 false 반환 * 해결 다음 코드 추가 client.enterLocalPassiveMode();client.setFileType(FTP.BINARY_FILE_TYPE);client.setFileTransferMode(FTP.BINARY_FILE_TYPE);client.setControlEncoding(ftpSiteEncoding); http://stackoverflow.com/questions/8154115/ftpclient-storefile-always-return-false
* 개요java.lang.NullPointerExceptionat org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:471)at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:534)at org.apache.commons.net.ftp.FTP.type(FTP.java:934)at org.apache.commons.net.ftp.FTPClient.setFileType(FTPClient.java:965)... * 원인client.connect(); 안한 경우. * 해결해당 명령 실행.
* 개요 initializationError 또는 java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=test_66_bwnic], {ExactMatcher:fDisplayName=test_66_bwnic(com.cidog.bbs.Test_2_Bbs_spring)], {LeadingIdentifierMatcher:fClassName=com.cidog.bbs.Test_2_Bbs_spring,fLeadingIdentifier=test_66_bwnic]] from org.junit.internal.requests.ClassRequest@523884b2at org.junit.internal.requests.FilterRequest.ge..
컬렉션의 데이터를 변경하는 작업시 내부적으로 복사본을 하나 더 만들어 작업하는 방식 iterate 중에 add/remove 수행하면 - 비동기화 컬렉션의 경우 ConcurrentModificationException 을 발생시키고 - 동기화 컬렉션의 경우 락을 걸어 쓰레드가 동시접근 할 수 없도록 구현한다. - 반면 Copy-on-write 방식은iterate 진행중에 add 를 수행하면동일한 데이터 복사본을 만들어 여기에 작업한다.iterate 는 add 되기 전 데이터 원본 대상으로 진행되며, 작업이 끝나면 사라진다.최종적으로 add 된 데이터 복사본만 남게된다. 두 명령 실행시점의 데이터를 별도로 가지고 있으니락을 걸필요도 없고, 동시 접근에 의한 오류도 발생하지 않는다.하지만 복사본을 생성하므로 ..
http://cs.lmu.edu/~ray/notes/collections/ * 개요동일한 기능의 컬렉션도 성능, 정렬 여부, 기타 세부 기능에 따라 나눠지며동기화가 제공 되느냐에 따라 Concurrent 또는 Synchronized 가 되기도 한다. 언제까지 ArrayList 로 떡칠할 수 없으니 용도별 컬렉션 선택을 정리해봤다. 사용시 참고를 위해서 구현체를 기준으로 정리했다. * 비동기화 - 동기화 - 병렬 컬렉션 차이http://deepblue28.tistory.com/entry/Java-SynchronizedCollections-vs-ConcurrentCollections - synchronized Collection (동기화 컬렉션)Thread-safe 하지만, 동시 접근이 불가능해서 성능이 떨..
final Map m = new ConcurrentSkipListMap() { { put("a",1); put("b",2); put("c",3); put("d",4); } }; Thread t1 = new Thread() { int cnt=0; public void run() { while(true) { cnt++; m.put("e"+cnt, 1); if(cnt%1000 == 0) {// System.out.println("t1 "+cnt); } } } }; Thread t2 = new Thread() { int cnt=0; public void run() { while(true) { Iterator iter = m.keySet().iterator(); while(iter.hasNext()) { Syst..
* 개요자바 컬렉션에 관해 정리해본다 - 각 컬렉션 별 관계는 다음 링크에 잘 정리되어 있다http://hochulshin.com/java-collection-framework/ * 어떤 컬렉션을 선택할 것가멀티스레드 동기화 할건지, 성능이 뛰어난지, GC에 의해 사라지게 할건지 http://dogcowking.tistory.com/279 * List Search리스트에서 검색은 indexOf, binarySearch, CollectionUtils.select 등이 이용 가능하다 http://dogcowking.tistory.com/81 * List SortCollections.sort() 이용하며,Comparator 를 만들어주거나, 리스트 요소를 Comparable로 구현하거나 .. https://g..
* 개요자바 리플렉션은 자바에서 정의된 클래스의 정보를 가지고 오기 위한 API 이다.선언된 클래스는 생성자, 메서드, 필드 등을 갖게 된다.이러한 클래스의 정보들을 객체로 받아올 수 있다. - 참고 http://gyrfalcon.tistory.com/entry/Java-Reflection * 예제흔히 사용하는 ArrayList의 클래스 정보를 가져오는 예제이다.Class 란 이름의 클래스가 있으며, 여기에 클래스에 대한 정보가 담겨 있다. (java.lang.Class)어떤 객체나 getClass() 를 통해 Class 객체를 가져올 수 있다.ArrayList lst = new ArrayList();Class c = lst.getClass(); * getDeclaredFields() 를 통해 Array..
* 개요새로 생겼거나, 숨겨져 있었거나, 아니면 다들 아는데 나만 몰랐거나 하는 기능들. - 다음 링크들을 주로 정리한 것이다http://whiteship.tistory.com/1925?category=56999https://stackoverflow.com/questions/15496/hidden-features-of-java - 다 정리하려 했는데 너무 많아서 흐지부지... * 이중 괄호 초기화List 선언 후 항상 lst.add(1);lst.add(2); 이렇게 선언하던걸 다음과 같이 선언 가능 lst = new ArrayList() {{ add(1); add(2); }}; - 이게 되는건 사실 생성자 이외에 이런 초기화가 가능하기 때문...https://stackoverflow.com/a/47493..
* TreeMap 이용한 정렬 https://stackoverflow.com/questions/7427758/how-to-use-sortedmap-interface-in-java https://okky.kr/article/40362 https://examples.javacodegeeks.com/core-java/util/treemap/java-sorted-map-example/ * TreeMap은 동기화 제공하지 않는다.따라서 iterator 진행과 동시에 다른 쓰레드에서 새로운 요소를 put() 하면ConcurrentModificationException 이 발생한다. - 이를 해결하기 위해서 java.util.concurrent.ConcurrentSkipListMap 을 사용한다. https://st..
inner class에ㅓㅅ * enum 에서 static 으로 생성하고생성자 정의하고변수 대입하니까 다음 에러 나 Syntax error, insert "AssignmentOperator Expression" to complete Expression static enum 때문이었어..대체왜? public enum Type {/**direct : 직접등록 */dire(1),/** derived : 파생된 - 어절 '조승희를' 에서 뽑아낸 '조승희' 는 deri 가 됨 */ deri(3),/**complex = dire + ngram 둘다 발견된 경우 */comp(1),ngram(2);private final int rank;Type(int r) { this.rank = r;}}