yannick
Legacy Member
Om mijn vraag wat te verduidelijken:
Voor een project moeten wij csv inlezen en deze in de database zetten, omdat dit nogal lang kan duren als de database op ne remote server staat zouden wij graag een Jframe maken met een progressbar in die werkt via een Thread (als we dit ni via een thread doen zal de JFrame pas tevoorschijn komen als alles al gdn is).
Dit is wat ik nu heb:
De Thread klasse
De Jframe die via de thread wordt opgeroepen
De functie waarin de Thread gestart wordt
Dit blijkt dus niet te werken, want hij laat de JFrame enkel zien als alles gedaan is
.
Iemand een idee hoe ik dit kan oplossen?
mvg
Yannick Wellens
Voor een project moeten wij csv inlezen en deze in de database zetten, omdat dit nogal lang kan duren als de database op ne remote server staat zouden wij graag een Jframe maken met een progressbar in die werkt via een Thread (als we dit ni via een thread doen zal de JFrame pas tevoorschijn komen als alles al gdn is).
Dit is wat ik nu heb:
De Thread klasse
Code:
//*
* CsvCheckDoneThread.java
*
* Created on 2 juni 2007, 18:12
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package Data;
import View.CsvProgress;
import java.awt.*;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
/**
*
* @author Welles
*/
public class CsvCheckDoneThread implements Runnable {
CsvProgress progress=new CsvProgress();
boolean ok=true;
/** Creates a new instance of CsvCheckDoneThread */
public CsvCheckDoneThread(){
}
public void run() {
progress.setVisible(true);
}
public void stopthread(){
progress.dispose();
ok=false;
}
public void setValue(int value){
progress.setValue(value);
}
}
De Jframe die via de thread wordt opgeroepen
Code:
/*
* CsvProgress.java
*
* Created on 2 juni 2007, 18:35
*/
package View;
import javax.swing.*;
import java.awt.*;
/**
*
* @author Welles
*/
public class CsvProgress extends JFrame {
/** Creates new form CsvProgress */
public CsvProgress() {
initComponents();
//centerscreen();
this.prgbar.setValue(0);
}
private void centerscreen(){
Dimension dim = getToolkit().getScreenSize();
Rectangle abounds = getBounds();
setLocation((dim.width - abounds.width) / 2,(dim.height - abounds.height) / 2);
}
public void setValue(int value){
this.prgbar.setValue(this.prgbar.getValue()+value);
}
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
prgbar = new javax.swing.JProgressBar();
jLabel1 = new javax.swing.JLabel();
jPanel2 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setAlwaysOnTop(true);
setBackground(new java.awt.Color(214, 205, 244));
setResizable(false);
prgbar.setStringPainted(true);
jLabel1.setFont(new java.awt.Font("Calibri", 0, 14));
jLabel1.setForeground(new java.awt.Color(0, 0, 153));
jLabel1.setText("<html>De csv's worden geladen.<br><p align=\"center\">Even geduld aub</p></html>");
jPanel2.setBackground(new java.awt.Color(67, 67, 201));
jLabel2.setFont(new java.awt.Font("Calibri", 0, 48));
jLabel2.setForeground(new java.awt.Color(255, 255, 255));
jLabel2.setText("<html>D<br>C<br>I</html>");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(29, 29, 29)
.addComponent(jLabel2)
.addContainerGap(37, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 179, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(23, Short.MAX_VALUE))
);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(prgbar, javax.swing.GroupLayout.PREFERRED_SIZE, 242, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(80, 80, 80)
.addComponent(jLabel1)))
.addGap(34, 34, 34))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap(65, Short.MAX_VALUE)
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addComponent(prgbar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(77, 77, 77))
.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JProgressBar prgbar;
// End of variables declaration
}
De functie waarin de Thread gestart wordt
Code:
public void InitializeCsv(String path) throws SQLException, IOException{
csvcheckclass=new CsvCheckDoneThread();
Thread cvsth = new Thread(csvcheckclass);
try{
cvsth.start();
Csv c= new Csv(game, wedstrijd, speeldag, speler, team, club, reeks, bc,csvcheckclass);
c.LeesCsv(path);
kalender k= new kalender(14,wedstrijd,team, club, bc);
k.create();
csvcheckclass.stopthread();
} catch (SQLException e){
csvcheckclass.stopthread();
throw new SQLException();
}
}
Dit blijkt dus niet te werken, want hij laat de JFrame enkel zien als alles gedaan is
.Iemand een idee hoe ik dit kan oplossen?
mvg
Yannick Wellens
. Ik zie gwn hoeveel functies em moet uitvoeren, dan doe ik 100/aantal functies, zo weet ik hoeveel em moet updaten na elke functie die gdn is.
. Want hij laat de gui pas zien als alles ingelezen is. Ik moet dus ervoor zorgen dat deze Jframe TIJDENS het inlezen getoond wordt en de progressbar wordt geupdate