PDA

Visualizza la versione completa : [JAVA] fa quello che vuole!!!!


FreeManX
10-06-2004, 19:20
Allora mi sto ad imbufalire!! :dh˛:
Io prenlo una lista di key da un hashtable, e la confronto con yna key che gli passo io (nella fattispecie le chiavi anno la forma: gg/mm/aaaa hh:mm)
E verficio che non ne esista ga una inserita... ma a quanto pare continua a dirmi che la data e gia presente!! anche se sono differenti!!!! :mad:
Questo e l'output della sysout (*)


gc1:1130263320874 gc2:1130263320874
gc1:1130263320875 gc2:1130263320875
gc1:1130263320877 gc2:1130263320877
gc1:1130263320885 gc2:1130263320885


oltretutto continua ad incrementarsi!!!!



Enumeration keys = listaTurni.keys();
GregorianCalendar gc1=null;
GregorianCalendar gc2=null;
try {
gc1 = Data.parseDate(key);
} catch (Exception e2) {

e2.printStackTrace();
}
while(keys.hasMoreElements()) {

try {

gc2 = Data.parseDate((String)keys.nextElement());
} catch (Exception e1) {
e1.printStackTrace();
}


if (gc1.getTime().compareTo(gc2.getTime())==0) {
System.out.println("gc1:"+gc1.getTimeInMillis()+" gc2:"+gc2.getTimeInMillis()); (*)
//System.out.println("Chiave 1:"+Data.formattaData(gc1)+" Chiave 2: "+Data.formattaData(gc2));
throw new TurnoEsistenteException();
}

}
:dh˛: :dh˛:

kateetak
11-06-2004, 10:15
Che strano...

Hai risolto?!?

FreeManX
11-06-2004, 10:55
Ho solo scoperto, che e' questo file a fare puttanate!!
Non so per quale motivo funziona in modo incrementale! :dh˛:
lo chiamo la prima e si esegue 1 volta.
lo chiamo la seconda e si esegue 2 volte.
lo chiamo la terza e si esegue 4 volte!! :di56: :di56:

Non so xke.... :zamm:
Oramia l'ho piallato via... adesso lo riscrivo da zero e speriamo bene!

kateetak
11-06-2004, 12:05
Se vuoi provare a postare anche il codice che chiama questo metodo potremmo provare a capirne di +.

FreeManX
11-06-2004, 15:05
sono 1000 righe circa :gren:

Vabbe' ora lo riscrivo tutto :dh˛: e dopo se funziona :sgrat: faccio un diff e vediamo cos poteva essere!!!

bye

FreeManX
11-06-2004, 18:37
Allora ho scoperto che non e' la funzione Add che ri ripete... ma e l'actionperformed che funziona in modo incrementale.

Ora mi chiedo, dal momento che ho 5 classi con almeno 5 actionperform a testa... nessuno fa sto proble... xke sta putt.. di classe lo deve fare :mad: :mad: :di56: :di56:

FreeManX
11-06-2004, 18:38
package gui;
import Session;
import Tornei;
import PartitaMultiPlayer;
import Turni;
import Arena;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import Exception.Arena.ChiaveErrataException;
import Exception.Arena.InvalidRangeException;
import Exception.Arena.NotFoundTorneoException;
import Exception.Arena.TurnoEsistenteException;

import java.awt.*;
import java.awt.event.*;
import java.util.Enumeration;
import java.util.GregorianCalendar;

public class UIDate extends JInternalFrame {
private Session sessione;
private JInternalFrame thisFrame = this;

//Pannelli
private JPanel pnlTitolo = new JPanel();
private JPanel pnlCorpo = new JPanel();

//Componenti tabella
private DefaultListModel lstModelTornei = new DefaultListModel();
private JList lstTornei = new JList(lstModelTornei);

private DefaultListModel lstModelTurni = new DefaultListModel();
private JList lstTurni = new JList(lstModelTurni);

private JLabel lblTitolo = new JLabel("Gestione date"),
lblLista1 = new JLabel("Lista tornei"),
lblLista2 = new JLabel("Lista turni"),
lblData = new JLabel("Data di svolgimento");

private JTextField fldData = new JTextField(25);

private JButton btnSalva = new JButton("Salva"),
btnPartecipanti = new JButton("Visualizza Partecipanti");

public UIDate(Session sessione) {
super("Gestione date", true, true, false, false);

this.sessione = sessione;

if (sessione.getServer().getNumeroTornei() == 0) {
JOptionPane.showMessageDialog(
thisFrame,
"Non e' stato definito nessun torneo",
"Avviso",
JOptionPane.INFORMATION_MESSAGE);
this.dispose();
return;
}

//Setup Frame
this.setDefaultCloseOperation(JInternalFrame.DISPO SE_ON_CLOSE);
this.setLocation(50, 50);
Container cp = this.getContentPane();
cp.setLayout(new BorderLayout());

//Setup pannello titolo
lblTitolo.setFont(new Font("Arial", 1, 24));
lblTitolo.setAlignmentX(JLabel.CENTER_ALIGNMENT);
pnlTitolo.setLayout(new FlowLayout());
pnlTitolo.add(lblTitolo);

//SetUp corpo
pnlCorpo.setLayout(new GridBagLayout());
GridBagConstraints layout = new GridBagConstraints();
layout.gridx = 0;
layout.gridy = 0;
pnlCorpo.add(lblLista1, layout);

layout = new GridBagConstraints();
layout.gridx = 1;
layout.gridy = 0;
pnlCorpo.add(lblLista2, layout);

layout = new GridBagConstraints();
layout.gridx = 2;
layout.gridy = 0;
layout.gridwidth = 2;
pnlCorpo.add(lblData, layout);

layout = new GridBagConstraints();
layout.gridx = 0;
layout.gridy = 1;
layout.gridheight = 3;
layout.fill = GridBagConstraints.BOTH;
pnlCorpo.add(new JScrollPane(lstTornei), layout);

layout = new GridBagConstraints();
layout.gridx = 1;
layout.gridy = 1;
layout.gridheight = 3;
layout.fill = GridBagConstraints.BOTH;
pnlCorpo.add(new JScrollPane(lstTurni), layout);

layout = new GridBagConstraints();
layout.gridx = 2;
layout.gridy = 1;
layout.fill = GridBagConstraints.BOTH;
pnlCorpo.add(fldData, layout);

layout = new GridBagConstraints();
layout.gridx = 2;
layout.gridy = 2;
pnlCorpo.add(btnSalva, layout);

layout = new GridBagConstraints();
layout.gridx = 2;
layout.gridy = 3;
layout.gridwidth = 2;
pnlCorpo.add(btnPartecipanti, layout);

//Riempimento lista tornei
for (int i = 0; i < sessione.getServer().getNumeroTornei(); i++) {
try {

if (!(sessione.getServer().getTorneo(i).getTipoTorneo ()
== Tornei.TORNEO_SINGOLO))
lstModelTornei.add(
lstTornei.getModel().getSize(),
(sessione.getServer().getTorneo(i)).getNomeGioco() );
} catch (InvalidRangeException e) {
e.printStackTrace();
}
}

lstTornei.addListSelectionListener(new cmdSelezionaTornei());

//Disattiva campi
btnSalva.setEnabled(false);
btnPartecipanti.setEnabled(false);
lblData.setEnabled(false);
fldData.setEditable(false);

//Add finale form
cp.add(pnlTitolo, BorderLayout.NORTH);
cp.add(pnlCorpo, BorderLayout.CENTER);

pack();
show();

}

private class cmdSelezionaTornei implements ListSelectionListener {

public void valueChanged(ListSelectionEvent e) {
//Cancella tutti gli elementi
lstModelTurni.removeAllElements();

//Get del torneo
Tornei torneo = null;
try {
torneo =
sessione.getServer().getTorneo(
(String) lstTornei.getSelectedValue());
} catch (NotFoundTorneoException e1) {
JOptionPane.showMessageDialog(
thisFrame,
"Torneo Inesistente",
"Errore",
2);
return;
}

if (!e.getValueIsAdjusting()) {

//Verifica che sia scaduta l'iscrizione
if (torneo.getDataScadenzaIscrizione().getTimeInMilli s() > (new GregorianCalendar()).getTimeInMillis())

{
JOptionPane.showMessageDialog(
thisFrame,
"Finche le iscrizioni non sono chiuse non puo definire le date di gioco: \n\nLe iscrizioni scadono: "
+ utils.Data.formattaData(
torneo.getDataScadenzaIscrizione()),
"Avviso",
JOptionPane.INFORMATION_MESSAGE);
thisFrame.setTitle("Gestione date");
return;
}

thisFrame.setTitle("Gestione date: " + torneo.getNomeGioco());

//Tipo di torneo
if (torneo.getTipoTorneo() == Tornei.TORNEO_ITALIANO) {
//TORNEO DI TIPO ITALIANO
int numTeams = torneo.getNumeroGiocatori();

//Verifica condizioni sul numero di partecipanti
if (numTeams % 2 != 0
|| numTeams == 0
|| numTeams < torneo.getUtentiMin()) {
JOptionPane.showMessageDialog(
thisFrame,
"Il numero di partecipanti e dispari o zero oppure minore del minimo scelto",
"Errore",
2);

int confirm;
confirm =
JOptionPane.showConfirmDialog(
thisFrame,
"Vuoi prolungare la data di iscrizione? Oppure Eliminare il torneo?\n"
+ "YES = Prolunga\n"
+ "NO = Lascia inalterato\n"
+ "CANCEL = Cancella il torneo",
"Cosa vuoi fare?",
JOptionPane.YES_NO_CANCEL_OPTION);

if (confirm == JOptionPane.NO_OPTION) {
return;
} else if (confirm == JOptionPane.YES_OPTION) {
boolean dataOk = false;
GregorianCalendar d = null;
while (!dataOk) {

String newData =
JOptionPane.showInputDialog(
thisFrame,
"Inserisci la nuova data (gg/mm/aaaa hh:mm)",
"Nuova data");
if (newData == "" || newData == null) {
dataOk = false;
continue;
}

try {
d = utils.Data.parseDate(newData);
} catch (Exception e1) {
JOptionPane.showMessageDialog(
thisFrame,
"Data errata!",
"Avviso",
2);
dataOk = false;
continue;
}
//Verifica che la data non sia dopo la fine del torneo
if (d.after(torneo.getDataScadenzaTorneo())) {
JOptionPane.showMessageDialog(
thisFrame,
"Data fine iscrizione dopo scadenza torneo",
"Errore",
2);
dataOk=false;
} else
dataOk = true;
}



//SETTA NUOVA DATA

torneo.setDataScadenzaIscrizione(d);

} else {
//ELIMINA TORNEO
try {
sessione.getServer().removeTorneo(
torneo.getNomeGioco());
} catch (NotFoundTorneoException e1) {
JOptionPane.showMessageDialog(
thisFrame,
"Torneo Inesistente",
"Errore",
2);
return;

}
}
return;
} //END IF NUMERO DI PARTECIPANTI

//Creazione lista turni e partecipati
//int[][][] giornate = Arena.calcoloGiornate(numTeams);

if (torneo.getNumeroTurni() == 0) {
for (int i = 0; i < numTeams - 1; i++) {
lstModelTurni.add(
lstTurni.getModel().getSize(),
("Turno #" + (i + 1) + " [da definire]"));
}
} else {
Enumeration keys = torneo.getListaTurni();
int n = 0;
while (keys.hasMoreElements()) {
lstModelTurni.add(
lstTurni.getModel().getSize(),
keys.nextElement());
n++;
}

if (numTeams - 1 > n) {
for (int i = n; i < numTeams - 1; i++) {
lstModelTurni.add(
lstTurni.getModel().getSize(),
("Turno #" + (i + 1) + " [da definire]"));
}
}

}

} else if (torneo.getTipoTorneo() == Tornei.TORNEO_DI_COPPA) {

} else {
JOptionPane.showMessageDialog(
thisFrame,
"Torneo estraneo",
"Errore",
2);
return;

} //FINE IF..ELSEIF..ELSE TIPO TORNEO
lstTurni.addListSelectionListener(new cmdSelezionaTurno());
}
}
}


private class cmdSelezionaTurno implements ListSelectionListener {
public void valueChanged(ListSelectionEvent e) {

Tornei torneo=null;
try {
torneo= sessione.getServer().getTorneo((String)lstTornei.g etSelectedValue());
} catch (NotFoundTorneoException e1) {
e1.printStackTrace();
}

if (!e.getValueIsAdjusting()) {

//Verifica che la chiave e corretta
boolean validKey=true;
try {
utils.Data.parseDate((String) lstTurni.getSelectedValue());
} catch (Exception e2) {
validKey=false;
}

lblData.setEnabled(true);
fldData.setEditable(true);
btnSalva.setEnabled(true);
btnPartecipanti.setEnabled(true);
if (!validKey) {
btnSalva.addActionListener(new cmdSalva());
btnSalva.setText("Salva");
} else {
btnSalva.setText("Modifica data");
btnSalva.addActionListener(new cmdModifica());
}


}
}
}

private class cmdSalva implements ActionListener {

public void actionPerformed(ActionEvent e) {
//classe incriminata!!!!



System.out.println("salva----------------------->");

GregorianCalendar data= null;

//Contralla inserimento
if (fldData.getText() == "") {
JOptionPane.showMessageDialog(thisFrame,"Inserisci una data" ,"Avviso",JOptionPane.INFORMATION_MESSAGE);
return;
}
//Controllo correttezza
try {
data = utils.Data.parseDate(fldData.getText());
} catch (Exception e1) {
JOptionPane.showMessageDialog(thisFrame,"Formato errato.\n Inserirlo nella forma: gg/mm/aaaa hh:mm" ,"Avviso",JOptionPane.INFORMATION_MESSAGE);
return;

}

//Estrazione torneo
Tornei t =null;
try {
t = sessione.getServer().getTorneo((String) lstTornei.getSelectedValue());
} catch (NotFoundTorneoException e2) {
e2.printStackTrace();
}


//Crea il nuovo turno
Turni turno = new Turni();
turno.setStatoTurno(Turni.DA_GIOCARE);

int[][][] giornate = Arena.calcoloGiornate(t.getNumeroGiocatori());

//Aggiunge le partite
for(int i=0; i< giornate[0].length; i++) {
try {
turno.addPartita(new PartitaMultiPlayer("",t.getGiocatore(giornate[lstTurni.getSelectedIndex()][i][0]-1),t.getGiocatore(giornate[lstTurni.getSelectedIndex()][i][1]-1),0,0));
} catch (NullPointerException e3) {
e3.printStackTrace();
} catch (InvalidRangeException e3) {
e3.printStackTrace();
}
}


if (t.isInKey(fldData.getText())) {
System.out.println("E dentro:"+fldData.getText());
} else {
System.out.println("E fuori:"+fldData.getText());
}


//aggiunta turno al vettore
try {
t.addTurno(fldData.getText(), turno);
} catch (ChiaveErrataException e3) {
System.out.println("chiave usata");
e3.printStackTrace();
}




}

}

private class cmdModifica implements ActionListener {

public void actionPerformed(ActionEvent e) {

}

}




}

FreeManX
11-06-2004, 18:39
quel performed, viene seguido a potenze di 2 :dh˛: :dh˛:

primo clic 1 volta
secondo click 2 volte
terzo click 4 volte!!!
:di56: :di56:

FreeManX
11-06-2004, 19:37
Ho risolto! :dh˛:
Ogni volta che chiamo actionperformed, devo prima elimanre l'actionlistern presente!!!!

Ecco il diff tra i due:


--- UIDate_1.java 2005-06-11 19:47:17.000000000 +0200
+++ UIDate.java 2005-06-11 19:42:36.000000000 +0200
@@ -22,7 +22,10 @@
private Session sessione;
private JInternalFrame thisFrame = this;

+ //Action listener
+ private ActionListener acSalva;

+

//Pannelli
private JPanel pnlTitolo = new JPanel();
@@ -160,7 +163,8 @@
public void valueChanged(ListSelectionEvent e) {
//Cancella tutti gli elementi
lstModelTurni.removeAllElements();
-
+ btnSalva.removeActionListener(acSalva);
+



@@ -364,12 +368,13 @@
btnSalva.setEnabled(true);
btnPartecipanti.setEnabled(true);
if (!validKey) {
-
- btnSalva.addActionListener(new cmdSalva());
+ acSalva = new cmdSalva();
+ btnSalva.addActionListener(acSalva);
btnSalva.setText("Salva");
} else {
btnSalva.setText("Modifica data");
- btnSalva.addActionListener(new cmdModifica());
+ acSalva=new cmdModifica();
+ btnSalva.addActionListener(acSalva);
}


@@ -448,6 +453,7 @@
}


+ btnSalva.removeActionListener(acSalva);

}

Loading