[java] conflit entre static et repaint()
____22
Messages postés
101
Statut
Membre
-
____22 Messages postés 101 Statut Membre -
____22 Messages postés 101 Statut Membre -
Bonjour,
Bonjour
voici ma classe
à tester avec f4r5f5 dans la console d'entrée
par exemple
Le but est que ça s'actualise au fur et a mesure qu'on ajoute des points
mais impossible de glisser des repaint() dans les méthodes qui sont STATIC
comment faire SVP?
Bonjour
voici ma classe
public class graph extends JPanel{
static List<point> T=new ArrayList<point>();
static double angle;
static void avancerCar() {
try {
carCourant = (char) System.in.read();
} catch (java.io.IOException e) {
}
}
static void lireExpression() throws InterruptedException{
if (carCourant=='f'){avancerCar();lireDeplacement();}
else if (carCourant=='r'){avancerCar();lireRotation();}
else throw new Error (" Carac inattendu : ");
}
static void lireDeplacement() throws InterruptedException{
if (Character.isDigit(carCourant)){T.add(new point(carCourant*Math.cos(angle),carCourant*Math.sin(angle)));avancerCar();}
else throw new Error (" Carac inattendu : ");
}
static void lireRotation() throws InterruptedException{
if(Character.isDigit(carCourant)){angle+=(int)(carCourant);avancerCar();}
else throw new Error (" Carac inattendu : ");
}
public void paint(Graphics g){
g.drawString("bonjour", 100, 100);
if (T.size()>1){
for (int i=0;i<T.size()-1;i++){
g.drawLine(T.get(i).abs, T.get(i).ord, T.get(i+1).abs-T.get(i).abs, T.get(i+1).ord-T.get(i).ord);
}
}
}
public static void main(String[] args) throws InterruptedException {
lex2.avancerCar () ;
avancerCar() ; // initialisation du car courant
T.add(new point(0,0));
while (carCourant != ';'){
lireExpression();
}
for (int i=0;i<T.size();i++){
System.out.println(T.get(i).abs+".."+T.get(i).ord);
}
}
}
class point{
int abs,ord;
public point(double a,double o){abs=(int) (250+a);ord=(int) (250+o);}
}
à tester avec f4r5f5 dans la console d'entrée
par exemple
Le but est que ça s'actualise au fur et a mesure qu'on ajoute des points
mais impossible de glisser des repaint() dans les méthodes qui sont STATIC
comment faire SVP?
A voir également:
- [java] conflit entre static et repaint()
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
11 réponses
Bonjour,
Il faut que tu places ton main dans une autre classe (par exemple Lanceur).
Dans cette classe tu vas créer une instance de Graph (avec une majuscule, ou appelle le autrement si c'est déjà utilisé :), qui elle n'aura pas de méthode statique.
Les attributs statiques d'une classe sont des attributs qui sont partagées avec toutes les instances de ta classe, et les méthodes statiques ne peuvent utiliser que des attributs de classe (attributs statiques).
Ici ta classe Graph n'a besoin ni d'attribut statique, ni de méthode statique car le rafraichissement de ton JPanel ne concerne que l'instance en cours, et pas les autres.
Ainsi dans ton main tu auras un truc du genre:
Par contre, tu devras retirer tous les static de ta classe Graph désormais.
Bien cordialement !
Il faut que tu places ton main dans une autre classe (par exemple Lanceur).
Dans cette classe tu vas créer une instance de Graph (avec une majuscule, ou appelle le autrement si c'est déjà utilisé :), qui elle n'aura pas de méthode statique.
Les attributs statiques d'une classe sont des attributs qui sont partagées avec toutes les instances de ta classe, et les méthodes statiques ne peuvent utiliser que des attributs de classe (attributs statiques).
Ici ta classe Graph n'a besoin ni d'attribut statique, ni de méthode statique car le rafraichissement de ton JPanel ne concerne que l'instance en cours, et pas les autres.
Ainsi dans ton main tu auras un truc du genre:
public static void main(String[] args) throws InterruptedException {
Graph mongraph = new Graph();
...
mongraph.repaint();
...
}
Par contre, tu devras retirer tous les static de ta classe Graph désormais.
Bien cordialement !
bonjour
je ne peux pas retirer les static des méthodes car j'en ai besoin, ça vient de "static carCourant" qui est le caractere en train d'etre lu dans la console d'entrée
je ne peux pas retirer les static des méthodes car j'en ai besoin, ça vient de "static carCourant" qui est le caractere en train d'etre lu dans la console d'entrée
Bonsoir !
Tout d'abord, je ne vois aucune déclaration d'attribut de classe "carCourant" dans ton code. Beaucoup de méthodes utilisent une variable "carCourant", mais je ne vois nulle part sa déclaration et son initialisation (surtout en static).
Pourquoi déclares-tu carCourant en static? Tu peux très bien le déclarer en attribut d'instance de la manière suivante:
Ainsi, toutes tes méthodes qui utiliseront carCourant pourront être passées en non-static.
Tout d'abord, je ne vois aucune déclaration d'attribut de classe "carCourant" dans ton code. Beaucoup de méthodes utilisent une variable "carCourant", mais je ne vois nulle part sa déclaration et son initialisation (surtout en static).
Pourquoi déclares-tu carCourant en static? Tu peux très bien le déclarer en attribut d'instance de la manière suivante:
public class Graph extends JPanel{
char carCourant;
...
void avancerCar() {
try {
carCourant = (char) System.in.read();
} catch (java.io.IOException e) {
}
}
...
Ainsi, toutes tes méthodes qui utiliseront carCourant pourront être passées en non-static.
salut
oui tu as raison ça marche aussi bien sans les statics
je sais pas si peux m'aider
mais ce que je cherche à faire, c'est faire en sorte que l'affichage soit "en direct"
cad je peux taper f4 ça avance de 40 sur l'applet et taper r50f50 ça tourne et avance sur l'applet
pour l'instant mon applet ne marche q'une fois
oui tu as raison ça marche aussi bien sans les statics
je sais pas si peux m'aider
mais ce que je cherche à faire, c'est faire en sorte que l'affichage soit "en direct"
cad je peux taper f4 ça avance de 40 sur l'applet et taper r50f50 ça tourne et avance sur l'applet
pour l'instant mon applet ne marche q'une fois
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JApplet;
public class test extends JApplet {
static List<point> T=new ArrayList<point>();
double angle=-Math.PI/2;;
char carCourant;
int x,y;
void avancerCar() {
try {
carCourant = (char) System.in.read();
} catch (java.io.IOException e) {
}
}
void lireExpression() throws InterruptedException {
if (carCourant=='f'){avancerCar();
int v=Integer.parseInt(carCourant+"");
x+=10*v*Math.cos(angle);
y+=10*v*Math.sin(angle);
T.add(new point(x,y));
avancerCar();
}
if (carCourant=='r'){avancerCar();
int v=Integer.parseInt(carCourant+"");
angle+=10*v*Math.PI/180;
avancerCar();
}
}
/*
static void lireExpression() throws InterruptedException{
if (carCourant=='f'){avancerCar();lireDeplacement();}
if (carCourant=='r'){avancerCar();lireRotation();}
//else throw new Error (" Carac inattendu : ");
}
static void lireDeplacement() throws InterruptedException{
if (Character.isDigit(carCourant)){
x+=10*Integer.parseInt(carCourant+"")*Math.cos(angle);
y+=10*Integer.parseInt(carCourant+"")*Math.sin(angle);
T.add(new point(x,y));
avancerCar();}
//else throw new Error (" Carac inattendu : ");
}
static void lireRotation() throws InterruptedException{
if(Character.isDigit(carCourant)){angle+=10*Integer.parseInt(carCourant+"")*Math.PI/180;avancerCar();}
//else throw new Error (" Carac inattendu : ");
}
*/
public void init(){
avancerCar() ; // initialisation du car courant
T.add(new point(0,0));x=y=0;
while (carCourant != ';'){
try {
lireExpression();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int i=0;i<T.size();i++){
System.out.println(T.get(i).abs+".."+T.get(i).ord);
}
}
public void paint(Graphics g){
g.drawString("bonjour", 100, 100);
if (T.size()>1){g.setColor(Color.blue);
for (int i=0;i<T.size()-1;i++){
g.drawLine(T.get(i).abs, T.get(i).ord, T.get(i+1).abs, T.get(i+1).ord);
}
}
}
public static void main(String args[]) {
new test();
}
}
class point{
int abs,ord;
public point(double a,double o){abs=(int) (100+a);ord=(int) (150+o);}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Je n'arrive pas à lancer ton programme. Cependant, ton applet affiche quelque chose une et une seule fois car lors du lancement de l'applet :
- la méthode init est appelée, donc ta liste T contient un élément
- ensuite la méthode paint est appelée, et donc ça doit afficher ce que tu souhaites correctement
Par contre, lorsque tu tapes d'autres caractères dans ta console, est-tu bien sûr qu'ils sont détectés?
Parce que pour cela il faudrait que ta méthode avancerCar soit toujours en cours d'exécution, alors que pour le moment j'ai bien l'impression qu'une fois que tu l'as appelée, elle a retourné et qu'elle ne lit pas les caractères suivants. Si ce n'est effectivement pas le cas, place-là dans un autre thread et dans une boucle infinie, afin qu'elle puisse lire les caractères au fur et à mesure que tu les tapes.
Enfin, tu dois utiliser la méthode repaint à chaque fois que tu souhaites que ton applet soit rafraichi (j'imagine à la fin des méthode lireDeplacement et lireRotation).
Je n'arrive pas à lancer ton programme. Cependant, ton applet affiche quelque chose une et une seule fois car lors du lancement de l'applet :
- la méthode init est appelée, donc ta liste T contient un élément
- ensuite la méthode paint est appelée, et donc ça doit afficher ce que tu souhaites correctement
Par contre, lorsque tu tapes d'autres caractères dans ta console, est-tu bien sûr qu'ils sont détectés?
Parce que pour cela il faudrait que ta méthode avancerCar soit toujours en cours d'exécution, alors que pour le moment j'ai bien l'impression qu'une fois que tu l'as appelée, elle a retourné et qu'elle ne lit pas les caractères suivants. Si ce n'est effectivement pas le cas, place-là dans un autre thread et dans une boucle infinie, afin qu'elle puisse lire les caractères au fur et à mesure que tu les tapes.
Enfin, tu dois utiliser la méthode repaint à chaque fois que tu souhaites que ton applet soit rafraichi (j'imagine à la fin des méthode lireDeplacement et lireRotation).
tu lances le programme en Applet
et tu mets f4r5f9; dans la console et entrée
ça doit marcher
j'aimerais que en mettant juste f4 ça trace, et que je peux continuer r5f9; , pour l'instant c'est impossible
et tu mets f4r5f9; dans la console et entrée
ça doit marcher
j'aimerais que en mettant juste f4 ça trace, et que je peux continuer r5f9; , pour l'instant c'est impossible
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JApplet;
public class test extends JApplet {
static List<point> T=new ArrayList<point>();
double angle=-Math.PI/2;;
char carCourant;
int x,y;
void avancerCar() {
try {
carCourant = (char) System.in.read();
} catch (java.io.IOException e) {
}
}
void lireExpression() throws InterruptedException {
if (carCourant=='f'){avancerCar();
int v=Integer.parseInt(carCourant+"");
x+=10*v*Math.cos(angle);
y+=10*v*Math.sin(angle);
T.add(new point(x,y));
avancerCar();repaint();
}
if (carCourant=='r'){avancerCar();
int v=Integer.parseInt(carCourant+"");
angle+=10*v*Math.PI/180;
avancerCar();
}
}
/*
static void lireExpression() throws InterruptedException{
if (carCourant=='f'){avancerCar();lireDeplacement();}
if (carCourant=='r'){avancerCar();lireRotation();}
//else throw new Error (" Carac inattendu : ");
}
static void lireDeplacement() throws InterruptedException{
if (Character.isDigit(carCourant)){
x+=10*Integer.parseInt(carCourant+"")*Math.cos(angle);
y+=10*Integer.parseInt(carCourant+"")*Math.sin(angle);
T.add(new point(x,y));
avancerCar();}
//else throw new Error (" Carac inattendu : ");
}
static void lireRotation() throws InterruptedException{
if(Character.isDigit(carCourant)){angle+=10*Integer.parseInt(carCourant+"")*Math.PI/180;avancerCar();}
//else throw new Error (" Carac inattendu : ");
}
*/
public void init(){
avancerCar() ; // initialisation du car courant
T.add(new point(0,0));x=y=0;
while (carCourant != ';'){
try {
lireExpression();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int i=0;i<T.size();i++){
System.out.println(T.get(i).abs+".."+T.get(i).ord);
}
}
public void paint(Graphics g){
g.drawString("bonjour", 100, 100);
if (T.size()>1){g.setColor(Color.blue);
for (int i=0;i<T.size()-1;i++){
g.drawLine(T.get(i).abs, T.get(i).ord, T.get(i+1).abs, T.get(i+1).ord);
}
}
}
public static void main(String args[]) {
new test();
}
}
class point{
int abs,ord;
public point(double a,double o){abs=(int) (100+a);ord=(int) (150+o);}
}
est ce qu'il est possible que la classe principale ne soit pas extens JAplplet
mais que je rajoute une classe palette
et apres dans le main j'affiche les dessin sur la palette etc
bon j'ai essayé mais la palette ne s'affiche pas
mais que je rajoute une classe palette
et apres dans le main j'affiche les dessin sur la palette etc
bon j'ai essayé mais la palette ne s'affiche pas
class palette extends JPanel{
String s;
public palette(String st){
s=st;
setVisible(true);
setSize(200,300);
}
public void paint(Graphics g){
g.drawString(s, 10, 10);
}
}
Voici ton code un peu modifié (notamment avec plus de classes).
Ce qu'il gère maintenant:
- tu peux enchainer les séquences sans pb (genre f2r3 puis f5 puis r1f4...)
- plus besoin de point virgule, tu tapes ta séquence puis la touche entrée
- ça utilise un thread pour lire sur ta console, mais pour arrêter le thread, il faut entrer le char '#' dans la console
- tu peux maintenant commencer ta séquence par r et non plus seulement par f (par exemple avant si tu faisais f2r3, ça allait bien, mais si tu faisais r3f2, le f2 n'était pas pris en compte)
Ce qu'il faut améliorer:
- la présentation déjà (pas de fond sur le jframe...)
- tu ne peux rentrer que des entiers compris entre 0 et 9 (ça vient de ton code, vu que tu fais des avancerCar un par un, il faudrait les mettre dans des boucles pour que tu puisses plus, ou, puisque c'est inutile vu les fonctions que tu utilises, pour éviter que ça plante :)
- au niveau du code c'est pas forcément top top, mais bon, après c'est à toi d'améliorer tout ça pour rendre lisible, plus performant, plus modulable...
Le code :
Ca te va ?
Ce qu'il gère maintenant:
- tu peux enchainer les séquences sans pb (genre f2r3 puis f5 puis r1f4...)
- plus besoin de point virgule, tu tapes ta séquence puis la touche entrée
- ça utilise un thread pour lire sur ta console, mais pour arrêter le thread, il faut entrer le char '#' dans la console
- tu peux maintenant commencer ta séquence par r et non plus seulement par f (par exemple avant si tu faisais f2r3, ça allait bien, mais si tu faisais r3f2, le f2 n'était pas pris en compte)
Ce qu'il faut améliorer:
- la présentation déjà (pas de fond sur le jframe...)
- tu ne peux rentrer que des entiers compris entre 0 et 9 (ça vient de ton code, vu que tu fais des avancerCar un par un, il faudrait les mettre dans des boucles pour que tu puisses plus, ou, puisque c'est inutile vu les fonctions que tu utilises, pour éviter que ça plante :)
- au niveau du code c'est pas forcément top top, mais bon, après c'est à toi d'améliorer tout ça pour rendre lisible, plus performant, plus modulable...
Le code :
Lanceur.java:
public class Lanceur {
public static void main(String args[]) {
LigneBriseeAffichage ligne = new LigneBriseeAffichage();
ligne.setVisible(true);
}
}
LigneBriseeAffichage.java
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class LigneBriseeAffichage extends JFrame {
private static final long serialVersionUID = 8474338316960569460L;
private LigneBrisee ligne = new LigneBrisee(this);
public LigneBriseeAffichage(){
setTitle("Générateur de lignes brisées");
setSize(320,320); //taille de la fenêtre
setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
setResizable(false); //On interdit la redimensionnement de la fenêtre
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
this.getContentPane().setBackground(Color.BLACK);
}
public void paint(Graphics g) {
if (ligne.getT().size() > 1) {
g.setColor(Color.blue);
for (int i = 0; i < ligne.getT().size() - 1; i++) {
g.drawLine(ligne.getT().get(i).abs, ligne.getT().get(i).ord,
ligne.getT().get(i + 1).abs,
ligne.getT().get(i + 1).ord);
}
}
}
}
LigneBrisee.java
import java.util.ArrayList;
import java.util.List;
public class LigneBrisee {
private LigneBriseeAffichage lba;
List<MonPoint> t = new ArrayList<MonPoint>();
double angle = -Math.PI / 2;;
char carCourant;
int x, y;
public LigneBrisee(LigneBriseeAffichage lba){
this.lba = lba;
new EcouteurConsole().start();
}
public class EcouteurConsole extends Thread {
public void run() {
try{
t.add(new MonPoint(0, 0));
x = y = 0;
while(true){
avancerCar();
if(carCourant != '#' ){
lireExpression();
}
else
break;
avancerCar();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
void lireExpression() throws InterruptedException {
while(carCourant != '\r'){
if (carCourant == 'f') {
avancerCar();
int v = Integer.parseInt(carCourant + "");
x += 10 * v * Math.cos(angle);
y += 10 * v * Math.sin(angle);
t.add(new MonPoint(x, y));
avancerCar();
}
if (carCourant == 'r') {
avancerCar();
int v = Integer.parseInt(carCourant + "");
angle += 10 * v * Math.PI / 180;
avancerCar();
}
lba.repaint();
}
}
void avancerCar() {
try {
carCourant = (char) System.in.read();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
public List<MonPoint> getT() {
return t;
}
public void setT(List<MonPoint> t) {
this.t = t;
}
}
MonPoint.java
public class MonPoint {
int abs, ord;
public MonPoint(double a, double o) {
abs = (int) (100 + a);
ord = (int) (150 + o);
}
}
Ca te va ?
salut
merci d'avoir résolu mon probleme
apparemment c'est grace aux threads que ça marche
je crois qu'il y a un interblocage entre la console et la frame sans la presence d'un autre thread
jettes-y un coup d'oeil si t'as le temps
ce code ecrit des right et des forwards dans la frame si on ecrit des rffrf; dans la console in, suivi de entrée
mais pourquoi la frame n'apparait pas des le lancement de l'app, et seulement apres que je tape entrée
si je supprime cette portion de code (la lecture depuis la console), la frame appparait direct quand je lance l'app
enfin si je mets un while(true)
import java.awt.Dimension;
import javax.swing.JScrollPane;
public class rr extends JPanel {
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setPreferredSize(new Dimension(220, 169));
jTextArea.setSize(new Dimension(220, 169));
}
return jTextArea;
}
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setPreferredSize(new Dimension(200, 164));
jScrollPane.setViewportView(getJTextArea());
}
return jScrollPane;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
char carCourant;
private JTextArea jTextArea = null;
private JScrollPane jScrollPane = null;
void avancerCar() {
try {
carCourant = (char) System.in.read();
} catch (java.io.IOException e) {
}
}
void lireExpression() throws InterruptedException {
if (carCourant=='f'){
jTextArea.append("forward");
avancerCar();repaint();
}
if (carCourant=='r'){
jTextArea.append("right");
avancerCar();
}
}
public rr() throws InterruptedException {
super();
initialize();
}
private void initialize() throws InterruptedException {
this.setSize(300, 200);
this.setLayout(new FlowLayout());
this.setVisible(true);
this.add(getJScrollPane(), null);
avancerCar() ; // initialisation du car courant
while (carCourant!=';'){
lireExpression();//repaint();
}
}
}
</code>
ce code ecrit des right et des forwards dans la frame si on ecrit des rffrf; dans la console in, suivi de entrée
mais pourquoi la frame n'apparait pas des le lancement de l'app, et seulement apres que je tape entrée
si je supprime cette portion de code (la lecture depuis la console), la frame appparait direct quand je lance l'app
la frame n'apparait jamais
merci d'avoir résolu mon probleme
apparemment c'est grace aux threads que ça marche
je crois qu'il y a un interblocage entre la console et la frame sans la presence d'un autre thread
jettes-y un coup d'oeil si t'as le temps
import java.awt.GridBagLayout;
import javax.swing.JPanel;
import java.awt.FlowLayout;
import javax.swing.JTextArea;
import java.awt.Dimension;
import javax.swing.JScrollPane;
public class rr extends JPanel {
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setPreferredSize(new Dimension(220, 169));
jTextArea.setSize(new Dimension(220, 169));
}
return jTextArea;
}
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setPreferredSize(new Dimension(200, 164));
jScrollPane.setViewportView(getJTextArea());
}
return jScrollPane;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
char carCourant;
private JTextArea jTextArea = null;
private JScrollPane jScrollPane = null;
void avancerCar() {
try {
carCourant = (char) System.in.read();
} catch (java.io.IOException e) {
}
}
void lireExpression() throws InterruptedException {
if (carCourant=='f'){
jTextArea.append("forward");
avancerCar();repaint();
}
if (carCourant=='r'){
jTextArea.append("right");
avancerCar();
}
}
public rr() throws InterruptedException {
super();
initialize();
}
private void initialize() throws InterruptedException {
this.setSize(300, 200);
this.setLayout(new FlowLayout());
this.setVisible(true);
this.add(getJScrollPane(), null);
avancerCar() ; // initialisation du car courant
while (carCourant!=';'){
lireExpression();//repaint();
}
}
}
ce code ecrit des right et des forwards dans la frame si on ecrit des rffrf; dans la console in, suivi de entrée
mais pourquoi la frame n'apparait pas des le lancement de l'app, et seulement apres que je tape entrée
si je supprime cette portion de code (la lecture depuis la console), la frame appparait direct quand je lance l'app
while (carCourant!=';'){
lireExpression();//repaint();
}
enfin si je mets un while(true)
import java.awt.Dimension;
import javax.swing.JScrollPane;
public class rr extends JPanel {
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setPreferredSize(new Dimension(220, 169));
jTextArea.setSize(new Dimension(220, 169));
}
return jTextArea;
}
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setPreferredSize(new Dimension(200, 164));
jScrollPane.setViewportView(getJTextArea());
}
return jScrollPane;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
char carCourant;
private JTextArea jTextArea = null;
private JScrollPane jScrollPane = null;
void avancerCar() {
try {
carCourant = (char) System.in.read();
} catch (java.io.IOException e) {
}
}
void lireExpression() throws InterruptedException {
if (carCourant=='f'){
jTextArea.append("forward");
avancerCar();repaint();
}
if (carCourant=='r'){
jTextArea.append("right");
avancerCar();
}
}
public rr() throws InterruptedException {
super();
initialize();
}
private void initialize() throws InterruptedException {
this.setSize(300, 200);
this.setLayout(new FlowLayout());
this.setVisible(true);
this.add(getJScrollPane(), null);
avancerCar() ; // initialisation du car courant
while (carCourant!=';'){
lireExpression();//repaint();
}
}
}
</code>
ce code ecrit des right et des forwards dans la frame si on ecrit des rffrf; dans la console in, suivi de entrée
mais pourquoi la frame n'apparait pas des le lancement de l'app, et seulement apres que je tape entrée
si je supprime cette portion de code (la lecture depuis la console), la frame appparait direct quand je lance l'app
la frame n'apparait jamais
while (true){
lireExpression();//repaint();
}
Hello,
Tout d'abord pourquoi dis-tu qu'il y a un interblocage dans le code que je t'ai envoyé? Les deux threads n'effectuent pas de traitements sur les mêmes données, il ne peut pas y avoir de blocage.
Concernant ton dernier message, j'ai essayé tes deux bouts de code (en commentant les while pour tester comme tu me le conseillais), mais je n'ai jamais réussi à ouvrir aucune Frame.
Je te conseille aussi de relire ton post avant de l'envoyer, car sur celui là on ne comprend vraiment rien (on dirait un gros copié-collé dans lequel tu as oublié de faire des modifs :
- tu parles d'un while(true) mais je ne le vois pas dans le code (c'est le code de l'exemple d'avant)
- "si je supprime cette portion de code (la lecture depuis la console), la frame appparait direct quand je lance l'app
la frame n'apparait jamais". C'est peut-être moi, mais là je ne saisis pas
...)
Tout d'abord pourquoi dis-tu qu'il y a un interblocage dans le code que je t'ai envoyé? Les deux threads n'effectuent pas de traitements sur les mêmes données, il ne peut pas y avoir de blocage.
Concernant ton dernier message, j'ai essayé tes deux bouts de code (en commentant les while pour tester comme tu me le conseillais), mais je n'ai jamais réussi à ouvrir aucune Frame.
Je te conseille aussi de relire ton post avant de l'envoyer, car sur celui là on ne comprend vraiment rien (on dirait un gros copié-collé dans lequel tu as oublié de faire des modifs :
- tu parles d'un while(true) mais je ne le vois pas dans le code (c'est le code de l'exemple d'avant)
- "si je supprime cette portion de code (la lecture depuis la console), la frame appparait direct quand je lance l'app
la frame n'apparait jamais". C'est peut-être moi, mais là je ne saisis pas
...)