Tôi cần một chút trợ giúp với thành phần JProgressBar
. Chương trình của tôi sao chép các tập tin từ nơi này sang nơi khác bằng cách sử dụng java.nio FileChannels
. Phương thức sao chép thực tế là transferFrom()
.Làm thế nào để theo dõi tiến trình (JProgressBar) với phương thức transferChromels FileFannels?
Tôi hiện có hai câu hỏi.
Làm cách nào để theo dõi tiến độ truyền của các Kênh tập tin? Tất cả các hướng dẫn tôi đã tìm thấy sử dụng java.io InputStreams thông thường và tăng tiến độ int trong khi lặp qua inputstream.
Phương thức sao chép của tôi (phương pháp FileChannel) được đóng gói theo một phương thức riêng được gọi bằng các phương thức khác lặp qua thư mục nguồn và đích và sau đó gọi các phương thức FileChannel cho mỗi tệp.
Làm cách nào để triển khai ProgressBar cho cơ chế sao chép hoàn chỉnh?
Tôi nên đọc Câu hỏi thường gặp sớm hơn một chút, vì vậy tôi đoán tôi phải chỉnh sửa bài đăng đầu tiên thay vì nhận xét câu trả lời, đúng không?
Ok đây là những gì tôi đã làm cho đến nay. Giống như jambjo được đề xuất (cảm ơn bằng cách này), phương pháp transferFrom()
hiện được lặp lại. BTW: Có kích thước đoạn thích hợp hơn hay không phụ thuộc vào độ chi tiết của thanh tiến trình của tôi giống như EJP đã nói?
Dưới đây là đoạn mã của tôi:
while (position < size) {
position += destination.transferFrom(source, position, chunkSize);
current = (position/size)*100;
System.out.println(current);
}
Đáng tiếc là giá trị 'hiện tại' vẫn 0 trong vòng lặp và tôi đã không có ý tưởng tại sao. Tôi có thiếu gì đó không?
Cảm ơn một lần nữa jambjo! Tôi thực sự đánh giá cao sự đầu vào của bạn! Bây giờ, việc giám sát tiến độ của một tệp đơn lẻ hoạt động, hãy giải quyết vấn đề thứ hai của tôi.
Tôi muốn, không phải theo dõi tiến trình của không chỉ một tệp duy nhất mà là một loạt tệp. Phương thức sao chép chính của tôi lặp qua các thư mục khác nhau và sao chép các tệp thích hợp bằng cách gọi phương thức truyền thực tế. Vì vậy, các phương thức sao chép không truyền tệp, chúng chỉ chọn tệp cho phương thức truyền thực tế.
nếu vị trí và kích thước là các loại nguyên (int hoặc long), vị trí/kích thước số nguyên luôn bằng 0, nếu kích thước lớn hơn vị trí. (int) (100. * vị trí/kích thước) có thể sẽ làm những gì bạn muốn. – jarnbjo