Я хочу добавить JProgressBar при загрузке файла. Я написал код для этого. Он работает. Но раньше я использовал метод BufferedReader и setText() для JTextArea для загрузки a файл, в этом случае потребовалось 6 секунд для загрузки текстового файла 44 МБ. Теперь я использую FileInputStream для чтения данных ProgressMonitorInputStream для отображения индикатора выполнения. В этом случае потребовалось 17 секунд времени для загрузки файла с 44 МБ. Как я могу решить эту проблему и Я хочу добавить индикатор Progress в свой кадр в левом нижнем углу. Пожалуйста, проверьте его и дайте мне предложения.Как добавить панель JProgress в левом нижнем углу кадра
Мой рабочий код:
public class ProgressbarAction extends javax.swing.JFrame implements Runnable {
JTextArea textArea;
int i=0;
JScrollPane scrollPane;
JTextField statusBar;
public ProgressbarAction() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
tabbedPane = new javax.swing.JTabbedPane();
fileMenubar = new javax.swing.JMenuBar();
fileMenu = new javax.swing.JMenu();
open = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
fileMenu.setText("File");
open.setText("Open");
open.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openActionPerformed(evt);
}
});
fileMenu.add(open);
fileMenubar.add(fileMenu);
setJMenuBar(fileMenubar);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
private void updateStatus(int linenumber, int columnnumber) {
statusBar.setText("Line: " + linenumber +" "+ " Column: " + columnnumber);
}
Thread athread;
private void openActionPerformed(java.awt.event.ActionEvent evt) {
athread = new Thread (this);
athread.start();
}
public void run(){
FileDialog fd = new FileDialog(ProgressbarAction.this, "Select File", FileDialog.LOAD);
fd.setVisible(true);
String title;
if (fd.getFile() != null) {
title=fd.getFile();
File file=new File(fd.getDirectory() + fd.getFile());
final JInternalFrame internalFrame = new JInternalFrame("",true,true);
textArea = new JTextArea();
textArea.setFont(new java.awt.Font("Miriam Fixed", 0, 13));
i+=1;
internalFrame.setName("Doc "+i);
scrollPane=new JScrollPane(textArea);
scrollPane.setPreferredSize (new Dimension(350,350));
internalFrame.add(scrollPane,BorderLayout. CENTER);
internalFrame.setTitle(title);
tabbedPane.add(internalFrame);
internalFrame.setVisible(true);
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream (file);
} catch (FileNotFoundException ex) {
Logger.getLogger(ProgressbarAction.class.getName()).log(Level.SEVERE, null, ex);
}
ProgressMonitorInputStream pmInputStream = new
ProgressMonitorInputStream (this," get file ... ", inputStream);
ProgressMonitor pMonitor =
pmInputStream.getProgressMonitor();
pMonitor.setMillisToDecideToPopup (0);
final Scanner in = new Scanner(pmInputStream);
textArea.setText("");
while (in.hasNextLine()) {
String line = in.nextLine();
textArea.append(line+"\n");
}
if(pMonitor.isCanceled()) {
textArea.append ("\n \n read files interrupt");
}
in.close();
textArea.setCaretPosition(0);
}
}
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ProgressbarAction.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ProgressbarAction.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ProgressbarAction.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ProgressbarAction.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ProgressbarAction().setVisible(true);
}
});
}
private javax.swing.JMenu fileMenu;
private javax.swing.JMenuBar fileMenubar;
private javax.swing.JMenuItem open;
private javax.swing.JTabbedPane tabbedPane;
}
Пожалуйста, предоставляет информацию, о том, что вы были предупреждены заранее, и как вы пытались выполнить эту штуковину. По крайней мере небольшое представление о ваших усилиях, поможет всем нам знать, где именно вы ошибаетесь !!!! –
В моей программе я использую textArea.setText (текст), Как я могу узнать, сколько данных загружено. Этого я хочу. – user3912886
См. [Как использовать мониторы прогресса] (http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html#monitors) и возвращайтесь к нам, если у вас есть какие-либо проблемы .. с помощью ** код **, который имеет проблему. Голосование закрывается как «слишком широкое». –