Java에서 파일을 읽을 때 진행률 막대를 표시하는 데 문제가 있습니다. 의도 한대로 모두 작동하며 사용자가 파일을 선택하고 프로그램에서 진행률 표시 줄을 표시해야하지만 빈 빈 프레임을로드하고 파일을 처리 한 다음 결과를 다른 창에로드해야합니다.JPanel이 JFrame에서로드되지 않습니다.
진행률 표시 줄 대화 상자의 내용을 표시하는 프로그램을 가져올 수 없습니다.
작은 도움을 주시면 정말 감사하겠습니다.
다음은 관련된 3 가지 코드의 코드입니다. , showProgressBar는()) 바와 closeProgressBar을 (표시하는 데 사용 반대 할 수있다
public void processFile(File arch) {
aFile = arch;
final SwingWorker searchOnFile = new SwingWorker(){
@Override
protected Object doInBackground() throws Exception {
try{
BufferedReader data = new BufferedReader(new FileReader(aFile));
String s;
while ((s = data.readLine()) != null) {
//long task
}
data.close();
}catch (Exception e){ //Catch exception if any
System.err.println("Error: " + e.getMessage());
}
interfacesController.closeProgressBar();
interfacesController.loadResults(someStuff);
return null;
}
};
interfacesController.showProgressBar();
searchOnFile.execute();
}
interfacesController가 GUI를 작동하기위한 모든 방법을 포함 SwingWorker를 함께 해결
//this method reads the file
public void processFile(File arch) {
aFile = arch;
Thread threadForSearch = new Thread() {
@Override
public void run() {
try{
listaProveedoresTango = controladoraConsultas.traerProveedores();
listaProveedoresAFIP = new LinkedList();
BufferedReader data = new BufferedReader(new FileReader(aFile));
String s;
while ((s = data.readLine()) != null) {
//long task
}
data.close();
}catch (Exception e){
System.err.println("Error: " + e.getMessage());
}
}
};
interfacesController.loadProgressBar();
threadForSearch.start();
try {
threadForSearch.join();
} catch (InterruptedException ex) {
Logger.getLogger(Controladora.class.getName()).log(Level.SEVERE, null, ex);
}
this.interfacesController.closeProgressBar();
this.interfacesController.loadResults(someStuff);
}
//load a progress bar
public void loadProgressBar(){
JProgressBar pb = new JProgressBar(0,100);
pb.setPreferredSize(new Dimension(175,20));
pb.setString("Processing Data");
pb.setStringPainted(true);
pb.setIndeterminate(true);
JLabel infoLabel = new JLabel("Reading File: ");
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent evt) {
exitSystem();
}
});
cancelButton.setVerticalAlignment(SwingConstants.CENTER);
JPanel center_panel = new JPanel();
center_panel.add(infoLabel);
center_panel.add(pb);
center_panel.add(cancelButton);
center_panel.setLayout(new BoxLayout(center_panel,BoxLayout.Y_AXIS));
dialog = new JDialog((JFrame)null, "Processing ...");
dialog.getContentPane().add(center_panel, BorderLayout.CENTER);
dialog.setSize(100, 100);
dialog.setLocationRelativeTo(null);
dialog.pack();
dialog.setVisible(true);
}
//close the open progress bar
public void closeProgressBar(){
this.dialog.dispose();
}
, 내가 요약 된 코드를 게시 . 고마워요!
1) 질문이 있으십니까? 2) EDT를 차단하지 말고 ** EDT에서 ** GUI 업데이트 **를 수행하십시오. E.G. SwingWorker 사용 3) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –