Newsgroup: it.comp.java
Titolo: Java teoria/pratica : possibile applicazione per un Thread

>>> fine del file PowGuiClock.java <<<<
Possibile risoluzione (?)
-----------------------
Se l'intuizione di creare ed usare un nuovo thread è valida potrei, nel
nuovo thread, utilizzare un oggetto dalla classe Timer istanziato nella
classe PowGuiClock
ed utilizzarlo, ad esempio con base tempi di 0.5 secondo (per avere un
orologio con incertezza massima di 1 secondo). In questo modo, ad ogni
evento del timer potrei aggiornare l'ora e la data usando la tecnica di
creare l'oggetto MyCalendar, usarlo ed in seguito distruggerlo facendolo
uscire di scope.
Cosa mi suggerite, anche le bacchettate sulle dita sono ben accette ;-)
Ciao e grazie
Pow
--
----------------------------------------------------
Ama il tuo mestiere con passione
E' il significato della tua vita
Auguste Rodin (1840-1917)
 "Not everything that  counts can be
 counted, and not everything that can
be counted counts".
Albert Einstein
"Hunt for the Engineer and the Engineer will hunt you."
Hellraiser5 Pinhead

 uscire di scope.
dunque, lascio a te il compito di provare con la classe Timer
io ti mostro la soluzione più semplice possibile che rispetto
al tuo codice non una un loop infinito (mangia cpu) e usa
un apposito thread per aggiornare l'ora ogni secondo
(non credo tu abbia bisogno di aggiornare l'ora con precisione atomica :)
class PowGuiClock extends JFrame implements Runnable {
[cut]
 public void StartStopClock(boolean ClockStatus) {
  new Thread(this).start(); // avvia il thread che aggiorna l'ora
periodicamente
 }
 public void run()
 {
  while (true) {
   // A questo livello MyData non esiste
   {
    String DataCorrente = "";
    MyCalendar MyData = new MyCalendar();
    if (Integer.toString(MyData.OraCorrente023()).length() == 1)
     Time_Hour.setText("0"+Integer.toString(MyData.OraCorrente023()) + ":");
    else
     Time_Hour.setText(Integer.toString(MyData.OraCorrente023()) + ":");
    if (Integer.toString(MyData.MinutiCorrenti()).length() == 1)
     Time_Minu.setText("0"+Integer.toString(MyData.MinutiCorrenti()) + " ");
    else
     Time_Minu.setText(Integer.toString(MyData.MinutiCorrenti()));
    DataCorrente = MyData.GiornoDellaSettimana() + " " +
            Integer.toString(MyData.GiornoDelMese()) + " " +
            MyData.MeseDellAnno() + " " +
            Integer.toString(MyData.AnnoCorrente());
    Data_Label.setText(DataCorrente);
   }
   // A questo punto MyData muore, esce dallo scope definito dalle {}
   try
   {
    Thread.currentThread().sleep(1000); //aggiorna l'ora ogni secondo
   }
   catch (InterruptedException e) {}
  }
 }
ciao[o
--
Andrea
http://jame.sf.net


[CUT]
Grazie per l'aiuto.
Visto che ci sono ;-) come ti sembra l'organizzazione del codice? Hai delle
osservazioni in merito?
Ancora grazie
Ciao


 osservazioni in merito?
dato che non ho mai realizzato un orologio non saprei cosa suggerirti
il codice mi sembra ordinato e commentato (pure troppo :)
mi vengono in mente solo due cose:
1) il this dentro a MyCalendar non serve
2) usa degli array statici
***********************************************
class MyCalendar extends GregorianCalendar {
 static final String[] mesi =
 {
  "Gennaio",
  "Febbraio",
  "Marzo",
  "Aprile",
  "Maggio",
  "Giugno",
  "Luglio",
  "Agosto",
  "Settembre",
  "Ottobre",
  "Novembre",
  "Dicembre"
 };
 static final String[] giorni =
 {
  "Lunedi",
  "Martedi",
  "Mercoledi",
  "Giovedi",
  "Venerdi",
  "Sabato",
  "Domenica"
 };
 static final String[] mode =
 {
  "AM",
  "PM"
 };
 String GiornoDellaSettimana() {
  String TempRet = "";
  switch (get(Calendar.DAY_OF_WEEK)) {
  case Calendar.MONDAY :
   TempRet = giorni[0];
   break;
  case Calendar.TUESDAY :
   TempRet = giorni[1];
   break;
  case Calendar.WEDNESDAY :
   TempRet = giorni[2];
   break;
  case Calendar.THURSDAY :
   TempRet = giorni[3];
   break;
  case Calendar.FRIDAY :
   TempRet = giorni[4];
   break;
  case Calendar.SATURDAY :
   TempRet = giorni[5];
   break;
  case Calendar.SUNDAY :
   TempRet = giorni[6];
   break;
  }
  return(TempRet);
 }
 String MeseDellAnno() {
  String TempRet = "";
  switch (get(Calendar.MONTH)) {
  case Calendar.JANUARY :
   TempRet = mesi[0];
   break;
  case Calendar.FEBRUARY :
   TempRet = mesi[1];
   break;
  case Calendar.MARCH :
   TempRet = mesi[2];
   break;
  case Calendar.APRIL :
   TempRet = mesi[3];
   break;
  case Calendar.MAY :
   TempRet = mesi[4];
   break;
  case Calendar.JUNE :
   TempRet = mesi[5];
   break;
  case Calendar.JULY :
   TempRet = mesi[6];
   break;
  case Calendar.AUGUST :
   TempRet = mesi[7];
   break;
  case Calendar.SEPTEMBER :
   TempRet = mesi[8];
   break;
  case Calendar.OCTOBER :
   TempRet = mesi[9];
   break;
  case Calendar.NOVEMBER :
   TempRet = mesi[10];
   break;
  case Calendar.DECEMBER :
   TempRet = mesi[11];
   break;
  }
  return(TempRet);
 }
 int AnnoCorrente() {
  return(get(Calendar.YEAR));
 }
 int OraCorrente() {
  return(get(Calendar.HOUR));
 }
 int MinutiCorrenti() {
  return(get(Calendar.MINUTE));
 }
 String Mode_AMPM() {
  String Mode = "";
  switch (get(Calendar.AM_PM)) {
  case Calendar.AM :
   Mode = mode[0];
   break;
  case Calendar.PM :
   Mode = mode[1];
   break;
  }
  return(Mode);
 }
 int OraCorrente023() {
  return(get(Calendar.HOUR_OF_DAY));
 }
 int SettimanaDellAnno() {
  return(get(Calendar.WEEK_OF_YEAR));
 }
 int GiornoDellAnno() {
  return(get(Calendar.DAY_OF_YEAR));
 }
 int GiornoDelMese() {
  return(get(Calendar.DAY_OF_MONTH));
 }
}// Fine classe MyCalendar
***********************************************
a parte queste piccole cose stavo pensando: perchè non usi DateFormat?
***********************************************
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
import java.text.*;
class PowGuiClock extends JFrame implements Runnable
{
 boolean ClockStatus = true;
 JLabel Time_Label = new JLabel("",JLabel.CENTER); // Label relativa all'ora
 JLabel Data_Label = new JLabel("",JLabel.CENTER); // Label relativa alla
data
 SimpleDateFormat Time_dateformat = new SimpleDateFormat("HH:mm");
 SimpleDateFormat Data_dateformat = new SimpleDateFormat("EEEEE dd MMMMM
yyyy");
 public PowGuiClock() {
  super("PowClock V1.1"); // Utilizza il costruttore di JFrame ed intitola
la GUI
  Draw_PowClockFrame(); // Disegna il Frame
  Action_PowClockFrame(); // gestisce gli eventi relativi alla GUI
 }
 public void Draw_PowClockFrame() {
  setBounds(100, 100, 270, 60); // Definisco le dimensioni per PowClockFrame
  Container cpane = getContentPane(); // Costruisco un contenitore per gli
oggetti
  cpane.setLayout(new GridLayout(1,2)); // Utilizza coordinate assolute per
posizionare gli oggetti
  Time_Label.setBackground(Color.GREEN); // Imposto il colore di sfondo
  Data_Label.setBackground(Color.YELLOW); // Imposto il colore di sfondo
  Time_Label.setOpaque(true); // Rendo lo sfondo della label opaco
  Data_Label.setOpaque(true); // Rendo lo sfondo della label opaco
  cpane.add(Time_Label); // Inserisco nel Panel la risorsa  JLabel
Time_Label
  cpane.add(Data_Label); // Inserisco nel Panel la risorsa  JLabel
Data_Label
  setResizable(true); // Definisco che il frame non è  ridimensionabile
dall'utente
  setVisible(true); // Visualizzo la GUI creata
 }
 public void Action_PowClockFrame() {
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Metodo di uscitapulito
 }
 public void StartStopClock(boolean ClockStatus) {
  this.ClockStatus = ClockStatus;
  new Thread(this).start(); // avvia il thread che aggiorna l'ora
periodicamente
 }
 public void run()
 {
  while (ClockStatus)
  {
   Date date = new Date();
   Time_Label.setText(Time_dateformat.format(date));
   Data_Label.setText(Data_dateformat.format(date));
   try
   {
    Thread.currentThread().sleep(1000); //aggiorna l'ora ogni secondo
   }
   catch (InterruptedException e) {}
  }
 }
 public static void main(String args[]) {
  try
  {
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  }
  catch (Exception e) {}
  PowGuiClock My_PowClockFrame = new PowGuiClock();
  My_PowClockFrame.StartStopClock(true);
 }
}
***********************************************
ciao)o
--
Andrea
http://jame.sf.net


[CUT]
grazie per l'info, non avovo preso in considerazione DateFormat.
Inizialmente l'idea era di scrivere una
classe di tipo generale da utilizzare per estrarre le varie informazioni un
pezzo alla volta, a seconda delle
esigenze.
Grazie ancora anche per l'esempio del codice !!!!!!!
Ciao ed ancora grazie per i consigli e l'assistenza
Pow
PS ne approfitto ancora, per il pilotaggio della seriale ho vosto che SUN
mette a disposizione
le Communication API. Io utilizzo JDK 1.4.1_02, ho installato queste API,
seguendo il procedimento
illustrato dalla SUN, ma sotto Win2000 Professional nisba, la risposta è che
non viene trovata nessuna porta. Ho quindi due sospetti:
1) Win2000 richiede di lavorare a livello di Kernel per ciò che concerne il
pilotaggio delle perferiche
HW e non penso che le API lo permettano
2) sul sito della SUN non è scritto nulla in merito alla versione di JDK
supportata a parte la 1.2 (mi sembra), non potrebbero esserci dei problemi
con la release 1.4.1_02 oppure, come spero, viene
mantenuta la compatibilità all'indietro e quindi le API sono ancora valide?
3) Se 1 e vero ed anche 2 allora dovrebbe girare sotto Win98/Me, hai qualche
notizia in proposito?
Se puoi rispondere mi faresti un favore, se preferisci posso postare aprendo
un nuovo thread.
Grazie ancora
Pow

 un nuovo thread.
su questo non posso aiutarti,
non ho mai usato la Communication API
è meglio per te se apri un nuovo thread


 mi pare di capire che tu sia un elettronico come me?
pure electronic core inside ;-)
Scherzi a parte bazzico parecchio anche dalle parti di:
it.hobby.elettronica
it.hobby.elettronica.digitale
free.it.elettronica
free.it.elettronica.pic
comp.lang.vhdl
comp.arch.fpga
sono i miei ng di elettronica preferiti, attualmente però mi occupo
prevalentemente di Java per pura passione personale.
[CUT]
Ciao e grazie
Pow

 prevalentemente di Java per pura passione personale.
anche per me java è pura passione, magari in futuro sarà lavoro...
nel frattempo, a partire da oggi, sono dottore in ingegneria elettronica :-)


 ha scritto nel
messaggio news:EMMFa.81272$Ny5.2...@twister2.libero.it...

bene auguroni ad un'altro collega appena entrato nel clan!!!!!
A quando l'esame di stato? (se vuoi farlo ti consiglio di togliertelo
subito, quando l'ho sostenuto io c'erano
laureati da 2-3 anni che remavano come pochi ;-) )
Fai una bevuta anche per me a ricordo dei bei tempi andati....


 Fai una bevuta anche per me a ricordo dei bei tempi andati....
sarą fatto :)
ciao
--
Andrea
http://jame.sf.net