Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-02-2006, 15:39   #1
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
[JAVA] creare un oggetto...

Un altra questione un "strana":
Class temp = UnAltraClasse.forName();

come faccio a creare un oggetto di tipo temp?
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2006, 15:51   #2
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Ho appena risolto:
basta fare
Object mioObj = temp.newIstance();

Cmq non è ancora finita: come faccio a passare ad mioObj un parametro "manualmente" per inizializzarlo con un parametro ben preciso? Spero di essermi spiegato...
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2006, 17:35   #3
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
penso che questi link ti siano sufficenti per autodarti tutte le risposte ;-)
Class
Field
Method
Constructor


Ciao!!
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 20-02-2006, 18:29   #4
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da DesmoColo
Ho appena risolto:
basta fare
Object mioObj = temp.newIstance();

Cmq non è ancora finita: come faccio a passare ad mioObj un parametro "manualmente" per inizializzarlo con un parametro ben preciso? Spero di essermi spiegato...
Object mioObj = new temp(param1,...,paramn)

ovviamente il costruttore della classe 'temp' deve essere coerente con i parametri passati.
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2006, 10:39   #5
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Forse ho capito...

Dopo averci pensato un giorno e una notte forse ho concluso qualcosina. Per motivi legati all'aplìplicazione che sto costruendo ho affidato il lavoro "sporco" a un thread apposito. Il Thread è così concepito:
il suo costruttore prende in ingresso una stringa (es: "provaBuildAttore");
Da questa stringa, costruisce due file:
provaBuildAttore.java e provaBuildAttoreAdapter.java con i metodi della classe FileWriter;
Un processo compila i due sorgenti;
il thread crea un oggetto actor di tipo provaBuildAttore
Se tutto va bene voglio che il Thread alla fine generi la seguente cosa:
provaBuildAttoreAdapter pbaa = new provaBuildAttoreAdapter(actor);
Visto che fino ad oggi non avevo mai usato i metodi della reflection (Anzi, mi sto stupendo di quanto sia potente ed efficace, per lo meno per quello che sto facendo!!!) vorrei sapere se il codice del run() del Thread è corretto. Il codice è il seguente:


import java.io.*;
import java.lang.reflect.*;
public class ThreadRuntime implements Runnable{

private String nameclass;
private Object oggettoRestituito;
public ThreadRuntime(String s){

nameclass = s;
}
public void setObject(Object o){
oggettoRestituito = o;
}
public Object getObject(){
Thread trt = new Thread(this,"ThreadName");
trt.start();
return oggettoRestituito;
}
public static Class getClass(Class c){
Class classe = null;
try{
classe = (Class)c.newInstance();
}catch(Exception e){}
return classe;
}
public void run(){

Object oggettoAttore = null;

Class attore = null;
Class attoreAdapter = null;

boolean checkpoint = false;

String rAdapter = nameclass.concat("Adapter");


String nomeFile= "public class "+nameclass + " extends Actor{public "+ nameclass+"(){};}";
String nomeFileAdapter = "import java.awt.event.*; public class " +nameclass+"Adapter extends KeyAdapter{private " +nameclass +" attore; public "+ nameclass+"Adapter("+nameclass+" a){attore = a;}}";
try{

FileWriter nomeF = new FileWriter(nameclass+".java");
FileWriter nomeFA = new FileWriter(nameclass + "Adapter.java");

char[] arrayNomeFile = nomeFile.toCharArray();
char[] arrayNomeFileAdapter = nomeFileAdapter.toCharArray();

int posArray = 0;
while(posArray != arrayNomeFile.length){
nomeF.write(arrayNomeFile[posArray]);
posArray++;
}
nomeF.close();

posArray = 0;

while(posArray != arrayNomeFileAdapter.length){
nomeFA.write(arrayNomeFileAdapter[posArray]);
posArray++;
}
nomeFA.close();
}catch(IOException ioe){}


try{
Process p = Runtime.getRuntime().exec("javac *.java");
}catch(IOException ioe){
System.out.println("ThreadRuntime Errore durante l'esecuzione di javac *.java");
}
try{
Thread.sleep(1000);
}catch(InterruptedException ie){ie.printStackTrace();}
try{
attore = Class.forName(nameclass);
attoreAdapter = Class.forName(rAdapter);

}catch(ClassNotFoundException e){
System.out.println("ThreadRuntime:non ho trovato una o piu' classi");
}
try{
oggettoAttore = attore.newInstance();
checkpoint = true;
}catch(InstantiationException instEx){
instEx.printStackTrace();
}catch(IllegalAccessException iae){
iae.printStackTrace();
}
if(checkpoint == true){
//QUESTO QUA SOTTO E' IL PUNTO DOVE HO MAGGIORI INCERTEZZE: VA BENE?
try{
Class c = ClassLoader.getSystemClassLoader().loadClass(rAdapter);
Constructor constructor = c.getConstructor(new Class[]{attore});
Object oggettoAttoreAdapter = constructor.newInstance(new Object[]{oggettoAttore});
setObject(oggettoAttoreAdapter);
}catch(Exception g){g.printStackTrace();};
}
}
public static void main(String[] args){
ThreadRuntime t = new ThreadRuntime("Testing");
Object testO = t.getObject();
System.out.println(testO);
}

Grazie ancora a tutti x l'aiuto!!!
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2006, 11:53   #6
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Per la parte che hai contrassegnato, ad occhio mi sembra di sì (non ho provato direttamente).

Io avrei però risolto in un altro modo.
Vedo che per ottenere il costruttore, crei una nuova classe di nome 'c': io sfrutterei 'attore' e 'attoreAdapter' che già crei prima.

Codice:
attore = Class.forName(nameclass);
attoreAdapter = Class.forName(rAdapter);
...
Constructor constructor = attoreAdapter.getConstructor(new Class[] {attore});
Una volta ottenuto il costruttore, procedi normalmente. Sbaglio?
Tra l'altro mi pare potresti fare un po' di code cleanup

EDIT: potresti anche provare passandogli direttamente 'attore', in questo modo:

Codice:
attore = Class.forName(nameclass);
attoreAdapter = Class.forName(rAdapter);
...
Constructor constructor = attoreAdapter.getConstructor(attore);
prova se funziona anche questo secondo metodo, ancora pù snello dal momento che il costruttore di 'attoreAdapter' ha un solo parametro. Non ne sono sicuro dal momento che getConstructor vuole un array come parametro.
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson

Ultima modifica di -fidel- : 21-02-2006 alle 12:40.
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 21-02-2006, 23:01   #7
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Il thread crea qualche problema

Pubblico la nuova versione del codice modificato, ed in fondo ad esso vi dico i problemi incontrati durante l'esecuzione:
import java.io.*;
import java.lang.reflect.*;
public class ThreadRuntime implements Runnable{

private String nameclass;
private Object oggettoRestituito;
private Boolean aspetta = false;
public ThreadRuntime(String s){

nameclass = s;
oggettoRestituito = getObject();
}
public void setObject(Object o){
oggettoRestituito = o;
}
public Object check(){
System.out.println("Metodo Check: " + oggettoRestituito);
return oggettoRestituito;
}
public Object getObject(){
Thread trt = new Thread(this,"ThreadName");
System.out.println("Faccio partire il thread");
trt.start();
try{
Thread.sleep(1000);
aspetta = true;
}catch(InterruptedException ie){
ie.printStackTrace();
}
System.out.println("Il Thread e' partito");
System.out.println("Variabile di Controllo: "+aspetta);
if(aspetta == true){
return oggettoRestituito;
}
else{
System.out.println("Il thread non ha aspettato!!! ");
}
return oggettoRestituito;
}
public void run(){
Object oggettoAttore = null;

Class attore = null;
Class attoreAdapter = null;

boolean checkpoint = false;

String rAdapter = nameclass.concat("Adapter");


String nomeFile= "public class "+nameclass + " extends Actor{public "+ nameclass+"(){};}";
String nomeFileAdapter = "import java.awt.event.*; public class " +nameclass+"Adapter extends KeyAdapter{private " +nameclass +" attore; public "+ nameclass+"Adapter("+nameclass+" a){attore = a;}}";
try{

FileWriter nomeF = new FileWriter(nameclass+".java");
FileWriter nomeFA = new FileWriter(nameclass + "Adapter.java");

char[] arrayNomeFile = nomeFile.toCharArray();
char[] arrayNomeFileAdapter = nomeFileAdapter.toCharArray();

int posArray = 0;
while(posArray != arrayNomeFile.length){
nomeF.write(arrayNomeFile[posArray]);
posArray++;
}
nomeF.close();

posArray = 0;

while(posArray != arrayNomeFileAdapter.length){
nomeFA.write(arrayNomeFileAdapter[posArray]);
posArray++;
}
nomeFA.close();
}catch(IOException ioe){}


try{
Process p = Runtime.getRuntime().exec("javac *.java");
}catch(IOException ioe){
System.out.println("ThreadRuntime Errore durante l'esecuzione di javac *.java");
}
try{
Thread.sleep(1000);
}catch(InterruptedException ie){ie.printStackTrace();}
System.out.println("dopo la sleep");
try{
attore = Class.forName(nameclass);
attoreAdapter = Class.forName(rAdapter);

}catch(ClassNotFoundException e){
System.out.println("ThreadRuntime:non ho trovato una o piu' classi");
}
try{
oggettoAttore = attore.newInstance();
checkpoint = true;
}catch(InstantiationException instEx){
instEx.printStackTrace();
}catch(IllegalAccessException iae){
iae.printStackTrace();
}
if(checkpoint == true){
try{
//Constructor constructor = attoreAdapter.getConstructor(new Class[] {attore});
Constructor constructor = attoreAdapter.getConstructor(attore);
Object oggettoAttoreAdapter = constructor.newInstance(new Object[]{oggettoAttore});
setObject(oggettoAttoreAdapter);
System.out.println("Oggetto restituito dal run:" + oggettoAttoreAdapter);
System.out.println("Dentro l'oggetto ADAPTER:" + oggettoAttore);
}catch(Exception g){g.printStackTrace();};
}
}
public static void main(String[] args){
ThreadRuntime t = new ThreadRuntime("Testing");
Object o = t.check();
System.out.println("Il main ha restituito il seguente oggetto: "+o);
}

}


Ecco i problemi:
Una volta su 200 il codice ha successo e l'output si puo vedere nell'immagine "sucesso". Le altre 199 però accade quanto riportato in immagine "errore"
La questione è questa:
Come mai il più delle volte l'oggetto rimane null? è sicuramente un problema di sincronizzazione durante l'esecuzione, ma non riesco a capire come risolverlo (è da stamattina che sono qui e sto sclerando nel tentativo di risoverlo!!!)
Che cosa sono quei residui di codice in fondo agli oggetti (per capire meglio perchè non viene restituito sempelicemente a video TestingAdapter e Testing invece di TestingAdapter@19821f e Testing@addbf1?)
Come posso elieminre tale "pattume", che anche se non so che cosa è sono sicuro che mi puo dare delle grane....
Immagini allegate
File Type: jpg successfull.jpg (20.9 KB, 1 visite)
File Type: jpg errore.jpg (20.7 KB, 2 visite)
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2006, 09:20   #8
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Il "pattume" di cui parli è probabilmente dato dal "name mangling" che i compilatori come C++ e Java effettuano sul nome delle variabili, dal momento che questi linguaggi, a differenza del C, permettono l'overload delle funzioni e delle classi. In C++ si usa la speciale keyword "C" per comunicare al compilatore di NON effettuare il name mangling su una funzione/classe, in Java a dire il vero non so (il name mangling causa problemi sulle dll, e con java non ho mai programmato dll ) quindi devi vedere sulla documentazione della sdk java come evitare questo. Ci sarà qualche keyword anche lì penso, ma non so dirti quale.

Per quanto riguarda la sincronizzazione: sì, hai grossi problemi di sincronizzazione, volevo dirtelo anche sul precedente esempio, ma su questa versione, se pur hai migliorato la reflection, mi pare hai incasinato di più la sincronizzzione

Lascio a te la scrittura del codice (tra poco devo andare al lavoro ) ma la linea guida può essere questa:

1) Crei il thread nel main.
2) Evita che il thread si "auto lanci" nel costruttore
3) Lancia il thread dal main (per esempio chimando il metodo getObject() come facevi prima)
4) Nel thread vedo che rischi: attendi un tempo prefissato affinchè il processo che crei per compilare le due classi attore e attoreAdapter finisca di compilare: ti conviene che il thread, dopo aver creato il processo, attenda la sua "morte".
5) Il main DEVE attendere fino a quando il thread non "muore": morendo, ritorna il valore che tu vuoi, ma il main deve aspettare: fallisce 199 volte su 200 proprio perchè, non attendendo nel main, il successo è un caso... A tal proposito toglierei la Thread.sleep() metterei nel thread l'attesa per la morte del processo che compila, nel main l'attesa per la morte del thread. Alla fine l'attesa complessiva del programma sarà "tempo di esecuzione processo compilatore + tempo di elaborazione del thread + tempo del main (trascurabile)"
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2006, 10:41   #9
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Ho modificato il codice e ne riporto l'ultima versione. Ti dico subito le modifiche fatte e gli errori (sigh!!!) che continua a dare:
- ho messo un wait nel run(), in modo che il thread aspetti la fine del processo che compila; per fare questo il thread controlla una guardia, che diventa false quando il processo ha teminato l'esecuzione;
- Ho messo un'altra wait nel main, in modo che aspetti la morte del thread per continuare l'esecuzione

In questo modo tutto sembra funzionare: l'oggetto restituito adesso è giusto.Il problema xrò è nel main: nonostante tutto termini viene sollevata la seguente eccezione:
Dentro il main si e' sollevata un'eccezione:
java.lang.Object.IllegalMonitorStateException:current thread not ower

Essendoci un while, l'eccezione viene sollevata continuamente finchè il thread non muore.
Se metto un if al posto del while non cambia niente....anche se una volta sola, l'eccezione viene ancora lanciata.
Se invece tolgo la wait() si ha come effetto che l'oggetto ritornato è ancora null, come prima.

import java.io.*;
import java.lang.reflect.*;
public class ThreadRuntime implements Runnable{

private String nameclass;
private Object oggettoRestituito;

public ThreadRuntime(String s){
nameclass = s;
oggettoRestituito = null;
}
public void setObject(Object o){
oggettoRestituito = o;
}
public Object check(){
System.out.println("Metodo Check: " + oggettoRestituito);
return oggettoRestituito;
}
public Object getObject(){
return oggettoRestituito;
}
public void run(){
Object oggettoAttore = null;

Class attore = null;
Class attoreAdapter = null;
boolean aspetta = true;
System.out.println("Aspetta e' inizializzato a true");
boolean checkpoint = false;

String rAdapter = nameclass.concat("Adapter");

String nomeFile= "public class "+nameclass + " extends Actor{public "+ nameclass+"(){};}";
String nomeFileAdapter = "import java.awt.event.*; public class " +nameclass+"Adapter extends KeyAdapter{private " +nameclass +" attore; public "+ nameclass+"Adapter("+nameclass+" a){attore = a;}}";
try{
FileWriter nomeF = new FileWriter(nameclass+".java");
FileWriter nomeFA = new FileWriter(nameclass + "Adapter.java");

char[] arrayNomeFile = nomeFile.toCharArray();
char[] arrayNomeFileAdapter = nomeFileAdapter.toCharArray();

int posArray = 0;
while(posArray != arrayNomeFile.length){
nomeF.write(arrayNomeFile[posArray]);
posArray++;
}
nomeF.close();

posArray = 0;

while(posArray != arrayNomeFileAdapter.length){
nomeFA.write(arrayNomeFileAdapter[posArray]);
posArray++;
}
nomeFA.close();
}catch(IOException ioe){
ioe.printStackTrace();
}

try{
Process p = Runtime.getRuntime().exec("javac *.java");
aspetta = false;
}catch(IOException ioe){
System.out.println("ThreadRuntime Errore durante l'esecuzione di javac *.java");
}
if(aspetta == true){
System.out.println("aspetta e' uguale a "+aspetta);
try{
wait();
}catch(InterruptedException ie){
System.out.println("Dentro il run() si e' sollevata un eccezione");
ie.printStackTrace();
}
}
System.out.println("Aspetta adesso e' "+aspetta);
try{
attore = Class.forName(nameclass);
attoreAdapter = Class.forName(rAdapter);
}catch(ClassNotFoundException e){
System.out.println("ThreadRuntime:non ho trovato una o piu' classi");
}
try{
oggettoAttore = attore.newInstance();
checkpoint = true;
}catch(InstantiationException instEx){
instEx.printStackTrace();
}catch(IllegalAccessException iae){
iae.printStackTrace();
}
if(checkpoint == true){
try{
//Constructor constructor = attoreAdapter.getConstructor(new Class[] {attore});
Constructor constructor = attoreAdapter.getConstructor(attore);
System.out.println(constructor);
Object oggettoAttoreAdapter = constructor.newInstance(oggettoAttore);
setObject(oggettoAttoreAdapter);
check();
System.out.println("Oggetto restituito dal run:" + oggettoAttoreAdapter);
System.out.println("Dentro l'oggetto ADAPTER:" + oggettoAttore);
}catch(Exception g){g.printStackTrace();};
}

}
public static void main(String[] args){
Object o = null;
ThreadRuntime t = new ThreadRuntime("Testing");
Thread thread = new Thread(t);
thread.start();
while(thread.isAlive()){
try{
t.wait();
}catch(Exception ie){
System.out.println("Dentro il main si e' sollevata un'eccezione");
ie.printStackTrace();
}
}
o = t.getObject();
System.out.println("Il main ha restituito il seguente oggetto: "+o);
}

}
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2006, 10:51   #10
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Ho risolto: è bastato cambiare la wait() con una join() e tutto sembra andar bene...
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2006, 23:21   #11
-fidel-
Senior Member
 
L'Avatar di -fidel-
 
Iscritto dal: Jan 2006
Messaggi: 2722
Quote:
Originariamente inviato da DesmoColo
Ho risolto: è bastato cambiare la wait() con una join() e tutto sembra andar bene...
Bene, mi fa molto piacere!
__________________

- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale.
- A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson
-fidel- è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2006, 23:53   #12
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Innanzitutto ringrazio x l'aiuto avuto fino ad ora. Pubblico due post. In questo post metto il sorgente corretto e funzionante(per poterlo confrontare meglio...), mentre nel secondo pubblico il codice modificato perchè svolga il compito per il quale lo sto progettando (e per il quale sto impazzendo!!!Ma fa parte del lavoro della mia tesi di laurea e mi tocca...)
Voglio la seguente cosa:
ho una LinkedList mylista con all'interno vari oggetti di diverso tipo e di cui non conosco a priori il tipo.

voglio che il thread, una volta creata le classi attore e attoreAdapter, inizializzi un oggetto nel siffatto modo;

attoreAdapter adp = new attoreadapter((attore)mylista.getFirst());


Credo di essere sulla buona strada (solo perchè sono un tipo ottimista...magari sto sbagliando tutto! )e credo che il lavoro che il codice scritto finora debba solo essere implementato con qualche accorgimento.

import java.io.*;
import java.lang.reflect.*;
public class ThreadRuntime implements Runnable{

private String nameclass;
private Object oggettoRestituito;

public ThreadRuntime(String s){
nameclass = s;
oggettoRestituito = null;
}
public void setObject(Object o){
oggettoRestituito = o;
}
public Object check(){
System.out.println("Metodo Check: " + oggettoRestituito);
return oggettoRestituito;
}
public Object getObject(){
Thread t = new Thread(this, "ThreadRuntime");
t.start();
try{
t.join();
}catch(InterruptedException ie){
System.out.println("Errore nella join()");
}
return oggettoRestituito;
}
public void run(){
Object oggettoAttore = null;

Class attore = null;
Class attoreAdapter = null;
System.out.println("Aspetta e' inizializzato a true");
boolean checkpoint = false;

String rAdapter = nameclass.concat("Adapter");

String nomeFile= "public class "+nameclass + " extends Actor{public "+ nameclass+"(){};}";
String nomeFileAdapter = "import java.awt.event.*; public class " +nameclass+"Adapter extends KeyAdapter{private " +nameclass +" attore; public "+ nameclass+"Adapter("+nameclass+" a){attore = a;}}";
try{
FileWriter nomeF = new FileWriter(nameclass+".java");
FileWriter nomeFA = new FileWriter(nameclass + "Adapter.java");

char[] arrayNomeFile = nomeFile.toCharArray();
char[] arrayNomeFileAdapter = nomeFileAdapter.toCharArray();

int posArray = 0;
while(posArray != arrayNomeFile.length){
nomeF.write(arrayNomeFile[posArray]);
posArray++;
}
nomeF.close();

posArray = 0;

while(posArray != arrayNomeFileAdapter.length){
nomeFA.write(arrayNomeFileAdapter[posArray]);
posArray++;
}
nomeFA.close();
}catch(IOException ioe){
ioe.printStackTrace();
}

try{
Process p = Runtime.getRuntime().exec("javac *.java");
p.waitFor();
}catch(IOException ioe){
System.out.println("ThreadRuntime:errore durante l'esecuzione di javac *.java");
}
catch(InterruptedException ie){
System.out.println("ThreadRuntime:errore nell'attesa che il processo javac terminasse");
ie.printStackTrace();
}
try{
attore = Class.forName(nameclass);
attoreAdapter = Class.forName(rAdapter);
}catch(ClassNotFoundException e){
System.out.println("ThreadRuntime:non ho trovato una o piu' classi");
}
try{
oggettoAttore = attore.newInstance();
checkpoint = true;
}catch(InstantiationException instEx){
instEx.printStackTrace();
}catch(IllegalAccessException iae){
iae.printStackTrace();
}
if(checkpoint == true){
try{
Constructor constructor = attoreAdapter.getConstructor(attore);
System.out.println(constructor);
Object oggettoAttoreAdapter = constructor.newInstance(oggettoAttore);
setObject(oggettoAttoreAdapter);
check();
System.out.println("Oggetto restituito dal run:" + oggettoAttoreAdapter);
System.out.println("Dentro l'oggetto ADAPTER:" + oggettoAttore);
}catch(Exception g){g.printStackTrace();};
}
}
public static void main(String[] args){
Object o = null;
ThreadRuntime t = new ThreadRuntime("Eddie");
o = t.getObject();
System.out.println("Il main ha restituito il seguente oggetto: "+o);
}

}
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2006, 23:56   #13
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Secondo Post

Mi scuso fin da ora se il codice del condo post è un po sporco, ma sono talmente cotto che se mi metto a pulirlo di sicuro lo incasino ancora di piu...in pratica ho provato a forzare il casting dell'oggetto dentro la lista (ipotizzando che ve ne sia uno soltanto x il momento) a attore facendo qualcosa tipo
oggettoCastato = attore.cast(primoElementoLista);

Viene sollevata l'eccezione ClassCastException....

import java.io.*;
import java.lang.reflect.*;
import java.util.*;
public class ThreadRuntime implements Runnable{

private String nameclass;
private Object oggettoRestituito;
private Class attore = null;
private Class attoreAdapter = null;
private Object oggettoDaCastare;

public ThreadRuntime(String s){
nameclass = s;
oggettoRestituito = null;
}
public void setObject(Object o){
oggettoRestituito = o;
}
public Object check(){
System.out.println("Metodo Check: " + oggettoRestituito);
return oggettoRestituito;
}
public void setOggettoDaCastare(Object o){
oggettoDaCastare = o;
}
public Object castOggetto(){
Object toCast = null;
System.out.println("Sto provando a fare il cast...");
try{
toCast = attore.cast(oggettoDaCastare);
}catch(ClassCastException cce){
System.out.println("Casting fallito!");
cce.printStackTrace();
}
return toCast;
}
public Object getObject(){
Thread t = new Thread(this, "ThreadRuntime");
t.start();
try{
t.join();
}catch(InterruptedException ie){
System.out.println("Errore nella join()");
}
return oggettoRestituito;
}
public void run(){
String rAdapter = nameclass.concat("Adapter");

String nomeFile= "public class "+nameclass + " extends Actor{public "+ nameclass+"(){};}";
String nomeFileAdapter = "import java.awt.event.*; public class " +nameclass+"Adapter extends KeyAdapter{private " +nameclass +" attore; public "+ nameclass+"Adapter("+nameclass+" a){attore = a;}}";
try{
FileWriter nomeF = new FileWriter(nameclass+".java");
FileWriter nomeFA = new FileWriter(nameclass + "Adapter.java");

char[] arrayNomeFile = nomeFile.toCharArray();
char[] arrayNomeFileAdapter = nomeFileAdapter.toCharArray();

int posArray = 0;
while(posArray != arrayNomeFile.length){
nomeF.write(arrayNomeFile[posArray]);
posArray++;
}
nomeF.close();

posArray = 0;

while(posArray != arrayNomeFileAdapter.length){
nomeFA.write(arrayNomeFileAdapter[posArray]);
posArray++;
}
nomeFA.close();
}catch(IOException ioe){
ioe.printStackTrace();
}

try{
Process p = Runtime.getRuntime().exec("javac *.java");
p.waitFor();
}catch(IOException ioe){
System.out.println("ThreadRuntime:errore durante l'esecuzione di javac *.java");
}
catch(InterruptedException ie){
System.out.println("ThreadRuntime:errore nell'attesa che il processo javac terminasse");
ie.printStackTrace();
}
try{
attore = Class.forName(nameclass);
attoreAdapter = Class.forName(rAdapter);
}catch(ClassNotFoundException e){
System.out.println("ThreadRuntime:non ho trovato una o piu' classi");
}
try{
Constructor constructor = attoreAdapter.getConstructor(attore);
System.out.println(constructor);
Object oggettoAttoreAdapter = constructor.newInstance(castOggetto());
setObject(oggettoAttoreAdapter);
check();
System.out.println("Oggetto restituito dal run:" + oggettoAttoreAdapter);
System.out.println("Dentro l'oggetto ADAPTER:" + castOggetto());
}catch(Exception g){
System.out.println("Sono qui!!!");
g.printStackTrace();}
}
public static void main(String[] args){
Object o;
TesterClass tc = new TesterClass();
LinkedList lista = new LinkedList();
ThreadRuntime t = new ThreadRuntime("Eddie");
System.out.println("Nel main dopo lo start()");
lista.add(tc);
System.out.println("Nel main dopo l'ggetto c");
t.setOggettoDaCastare(lista.getFirst());
System.out.println("Nel main dopo l'ggetto setOggettoDacastare()");
o = t.getObject();
System.out.println("Il main ha restituito il seguente oggetto: "+o);
}

}
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 08:54   #14
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Ho una terza (e finalmente credo che sia l'ultima se tutto fila liscio!) questione spinosa. Spero di non farne troppe tutte insieme Dal codice dei precedenti post si puo vedere che la classe attoreAdapter estende KeyAdapter.
Lo scopo che mi sono prefissato è questo:
mi creo due classi: attore e attoreAdapter e le compilo (fin qui ci siamo);
voglio che attore sia inizializzato con dei paremetri che gli passo da esterno;
attoreAdapter è inizializzato con l'oggetto di attore inizializzato prima;

infine, visto che attoreAdapter extends keyListener, fare

addKeyListener(attoreAdapter);

Se lo faccio adesso, attoreAdapter non è riconosciuto come estensione di KeyAdapter ma come un oggetto generico che non estende niente, quindi a meno che non faccia un ulteriore casting non lo posso passare come parametro a addKeyListener. Esiste una soluzione a questo problema? in poche parole, come faccio a dire a addKeyLiestner che il parametro che gli passo va già bene così?
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 10:30   #15
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
ehm...
ma non puoi usare il tag code quando posti il codice?
non ho nemmeno provato a leggerlo in quel modo senza indentazioni...
nn ci capisco niente..
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 23-02-2006, 10:44   #16
DesmoColo
Senior Member
 
L'Avatar di DesmoColo
 
Iscritto dal: Sep 2003
Città: Lucca
Messaggi: 379
Scusa...hai ragione! Ho fatto cut and paste ed è venuto fuori cosi!
facciamo così: allego un file txt con il codice pulito.
Per vederl con il testo colorato poi ti basta rinominarlo come .java
Allegati
File Type: txt ThreadRuntime.txt (4.1 KB, 4 visite)
__________________
God rides DUCATI!
DesmoColo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
L’ex CEO di Intel Gelsinger punta su una...
Techly, quattro nuovi supporti TV fra mo...
Mass Effect sacrificato per Star Wars: i...
Gemini, addio al copia e incolla per cor...
13 miliardi per un colpo di stato? NVIDI...
L'agente AI Wabi crea mini-app su misura...
Edge è il primo browser a supportare Acc...
L'IA di Firefox ora compila i moduli da ...
Tracking pixel nelle email: cosa cambia ...
La GeForce RTX 5080 da 24 GB potrebbe ar...
Apple mette alle strette OpenAI, la caus...
Xbox ancora in calo: ecco com'è a...
Car of the Year 2027: sette finaliste e ...
Google Beam cambia tutto: arrivano le vi...
Curry Barker, il regista di Obsession, p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v