Bonjour,
Dans mon appli je lance un autre programme à travers java.lang.Runtime, mais celui-ci prend le focus. Je souhaiterai lui reprendre. J'ai essayé requestFocus() mais sans résultat![]()
Merci.
Bonjour,
Dans mon appli je lance un autre programme à travers java.lang.Runtime, mais celui-ci prend le focus. Je souhaiterai lui reprendre. J'ai essayé requestFocus() mais sans résultat![]()
Merci.
Tu n'as pas essayer de le lancer à partir d'un autre thread que le thread principal de ton application ?
Merci de ta réponse, mais je ne la comprends pas très bien. En effet, la routine que je lance est déjà un "thread" (c'est une appli en C++). Pour attester mes dires, si je tue mon appli, la routine continue de tourner.
Donc elles me semblent l'une et l'autre totalement indépendentes.
merci
Peux tu montré le bout de code Java où tu lances l'application avec Runtime ? Merci.
Je pense qu'il faut que tu écoutes le focus, et lorsque tu le perds, hop ! tu le récupères (avec requestFocusInWindow, et non pas requestFocus, de préférence).
Voir FocusListener.
Dans l'état actuel des choses, je présume que tu le récupères alors que tu ne l'as pas encore perdu.
Salut à tous,
J'ai essayé de mettre la routine dans un thread à part, sans résultat.
J'ai essayé de mettre la méthode requestFocus dans lostFocuswindow, sans succés non plus.
je vais essayer avec requestFocusInWindow.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public void windowLostFocus(WindowEvent e) {myJFrame.this.requestFocus();System.out.println("perte de focus");}
voici le code de ma routine
la version threadée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 import java.io.*; import java.awt.*; import java.lang.*; import java.lang.String; import java.lang.Runtime; public class Lanceur { public Process proc; public String fileAdress; public boolean etat = false; public Lanceur(String fileAdress) { this.fileAdress = fileAdress; etat = true; } public Lanceur() { fileAdress = "C:\\Program Files\\Epiphan Systems VGA2USB\\v2ugui.exe"; etat = true; } public void stop() { proc.destroy(); } public void start() { try { proc = Runtime.getRuntime().exec(fileAdress); } catch (IOException ie) { System.out.println("Erreur fichier lance : " + ie ); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 import java.io.*; import java.awt.*; import java.lang.*; import java.lang.String; import java.lang.Runtime; public class Lanceur extends Thread { public Process proc; public String fileAdress; public boolean etat = false; public Lanceur(String fileAdress) { this.fileAdress = fileAdress; etat = true; } public Lanceur() { fileAdress = "C:\\Program Files\\Epiphan Systems VGA2USB\\v2ugui.exe"; etat = true; } public void run() { try{sleep(1000);} catch(Exception e){} if(etat){demarre();etat=false;} } public void arret() { proc.destroy(); } public void demarre() { try { proc = Runtime.getRuntime().exec(fileAdress); } catch (IOException ie) { System.out.println("Erreur fichier lance : " + ie ); } }
Salut,
Généralement, le système d'exploitation ne permet pas à une application de prendre le focus lorsqu'il appartient à une autre application, sauf lorsque cette dernière vient d'être lancé...
Il y a de forte chance que le requestfocus() soit bloqué par le système, tu ne peux pas y faire grand chose...
a++
mmm... cela me gène... as-tu bien enregistré le listener ?... (vérifie avec une trace s'il est bien activé) ; et puis je pense qu'il ne faut pas modifier le focus directement dans le listener, mais par l'intermédiaire de SwingUtilities.invokeLater : il n'est pas de bonne pratique d'agir sur un évènement dans son listener.Envoyé par moris113
Partager