Ti ringrazio, nel frattempo che aspetto le tue classi cerco di dare un'occhiata in giro, per quando riguarda la lettura da stdin con il lettore barcode ho redatto un piccolo metodo che funziona perfettamente, eccetto per il fatto che comunque la lettura da stdin è una chiamata bloccante e questo fa si che mi vadi a bloccare l'intera interfaccia grafica fino a che non digito un qualsiasi tasto da tastiera e do l'invio. Per ovviare a questa situazione ovviamente dovrei creare un thread che gestisce l'input in modalità non bloccante. Ho trovato in rete questo esempio e sto cercando di adattarlo al mio caso:
codice:
Si supponga di dover disegnare in maniera automatica e
ripetuta delle ellissi nella finestra grafica, e di voler
controllare gli attributi di tali ellissi mediante parole
chiave immesse da tastiera. Conviene separare il compito di
lettura e interpretazione (parsing) del flusso di caratteri
che viene dalla tastiera dal compito di produzione dell'output
grafico. Ciò si può realizzare come segue, nel caso semplice
in cui le parole accettate siano "rosso", "verde", e "blu"
corrispondenti a diverse colorature delle ellissi prodotte.
StringBuffer stdin;
boolean linea;
color colore;
void keyReleased() {
char c = key;
if (c!='\n') {
stdin.append(c);
}
else linea=true;
}
class ColorInput extends Thread {
String results;
char c;
void run() {
while(true) {
if (linea) {
println(stdin);
results=stdin.toString();
stdin.setLength(0);
linea = false;
if (results.equals("rosso")) {
colore = color(255, 0, 0);
}
if (results.equals("verde")) {
colore = color(0, 255, 0);
}
if (results.equals("blu")) {
colore = color(0, 0, 255);
}
}
try {
sleep(5); // to relief the cpu from active waiting
} catch (Exception e) {println("Exception in sleep");}
}
}
}
class TimerThread extends Thread{
int timediff; // quanto temporale
TimerThread(int td) {
timediff = td;
}
void run() {
while(true) {
try {
fill(colore);
ellipse(int(random(100)), int(random(100)),
int(random(20)), int(random(20)));
sleep(timediff);
} catch (Exception e) {println("Exception in sleep");}
}
}
}
void setup() {
stdin = new StringBuffer();
TimerThread tt1 = new TimerThread(100);
ColorInput ci = new ColorInput();
ci.start();
tt1.start();
}
void draw() {
}