JProgressBar
구성 요소에 대한 약간의 도움이 필요합니다. 내 프로그램은 java.nio FileChannels
을 사용하여 한 곳에서 다른 곳으로 파일을 복사합니다. 실제 복사 방법은 transferFrom()
입니다.FileChannels transferFrom() 메서드를 사용하여 진행률 (JProgressBar)을 모니터링하는 방법은 무엇입니까?
이제 두 가지 질문이 있습니다.
어떻게 FileChannels의 전송 진행 상황을 모니터링합니까? 내가 찾은 모든 자습서는 전통적인 java.io InputStreams를 사용하고 inputstream을 루핑하는 동안 진행 int를 증가시킵니다.
내 복사 메서드 (FileChannel 메서드)는 원본 및 대상 폴더를 반복하고 각 파일에 대해 FileChannel 메서드를 호출하는 다른 메서드에 의해 호출되는 별도의 메서드로 캡슐화됩니다.
어떻게 전체 복사 메커니즘을위한 ProgressBar를 구현합니까?
글쎄 좀 더 일찍 FAQ를 읽어야 했으므로 답변을 주석으로 작성하는 대신 초기 게시물을 편집해야한다고 생각하십니까?
이것은 내가 지금까지 해 온 것입니다. jambjo가 제안한대로 (덕분에 감사) transferFrom()
메소드가 반복됩니다. BTW : 바람직한 청크 크기가 있습니까? 아니면 EJP에서 말한 것처럼 진행률 막대의 입도에 따라 달라 집니까?
여기 내 코드입니다 :
while (position < size) {
position += destination.transferFrom(source, position, chunkSize);
current = (position/size)*100;
System.out.println(current);
}
는 불행하게도 '현재'값은 루프 내에서 0을 유지하고 그 이유를 아무 생각 없어했습니다. 내가 빠진 것이 있습니까?
다시 감사합니다. jambjo! 나는 정말로 당신의 의견을 고맙다! 단일 파일의 진행 모니터링이 작동 했으므로 두 번째 문제를 해결해 보겠습니다.
나는 하나의 파일뿐만 아니라 여러 파일의 진행 상황을 모니터링하고 싶습니다. 내 주요 복사 메소드는 다양한 디렉토리를 반복하고 실제 전송 메소드를 호출하여 적절한 파일을 복사합니다. 복사 방법은 파일을 전송하지 않으므로 실제 전송 방법으로 파일을 선택하는 것입니다.
위치 및 크기가 정수 유형 (int 또는 long) 인 경우 정수 나누기 위치/크기는 크기가 position보다 큰 경우 항상 0입니다. (int) (100. * position/size)는 아마도 당신이 원하는 것을 할 것입니다. – jarnbjo