J'ai un problème d'affichage!
J'ai mis mon application JavaFX en mode IconTray avec 3 menu possible (Show, Hide et Close)
- Show devrait afficher mon application
- Hide devrait le masquer
- Close devrait le fermet
Le problème se trouve sur le scénario suivant :
1 - Je clic sur Hide, mon application est vraiment masquée!
2 - Je clic sur Show, rien ne se passe , alors que ma fenètre devrait se réaffichée
Voic mon code
Le problème (je crois) c'est que l'aaplication ne retrouve plus le Thread nommé "FX application Thread" et reste bloqué sur le Thread de java.awt après que je clic sur Hide.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161 package gedsynchrone; import com.ged.scene.AuthentificationController; import java.awt.AWTException; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.event.ActionListener; import javafx.application.Application; import javafx.application.Platform; import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.geometry.Rectangle2D; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.paint.Color; import javafx.stage.Screen; import javafx.stage.Stage; import javafx.stage.WindowEvent; /** * * @author nathan */ public class GedSynchrone extends Application { private Parent root; private TrayIcon trayIcon; private boolean firstTime; // // static SynchroneThread st = new SynchroneThread("Synchronisation"); @Override public void start(final Stage primaryStage) { try { FXMLLoader loader = new FXMLLoader(AuthentificationController.class.getResource("/com/ged/scene/test.fxml")); root = (Parent) loader.load(); Scene scene = new Scene(root, 300, 250, Color.WHITE); firstTime = true; createTrayIcon(primaryStage); primaryStage.setScene(scene); primaryStage.getIcons().add(new Image("/com/ged/scene/images/icone.jpg")); primaryStage.setTitle("GED Desktop"); primaryStage.setMaxWidth(300.0); primaryStage.setMinWidth(300.0); primaryStage.setWidth(300.0); primaryStage.setResizable(false); Rectangle2D primScreenBounds = Screen.getPrimary().getBounds(); primaryStage.setX((primScreenBounds.getWidth() - 305)); primaryStage.setY((primScreenBounds.getHeight() - 330)); primaryStage.show(); } catch (Exception e) { } } public void createTrayIcon(final Stage stage) { if (SystemTray.isSupported()) { // get the SystemTray instance SystemTray tray = SystemTray.getSystemTray(); // load an image java.awt.Image image = Toolkit.getDefaultToolkit().getImage(AuthentificationController.class.getResource("/com/ged/scene/images/jpg.png")); stage.setOnCloseRequest(new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent t) { hide(stage); } }); final ActionListener closeListener = new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { System.exit(0); } }; ActionListener showListener = new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { Platform.runLater(new Runnable() { @Override public void run() { stage.show(); } }); } }; ActionListener hideListener = new ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent e) { Platform.runLater(new Runnable() { @Override public void run() { stage.hide(); } }); } }; // create a popup menu PopupMenu popup = new PopupMenu(); java.awt.MenuItem showItem = new java.awt.MenuItem("Show"); showItem.addActionListener(showListener); popup.add(showItem); java.awt.MenuItem hideItem = new java.awt.MenuItem("Hide"); hideItem.addActionListener(hideListener); popup.add(hideItem); java.awt.MenuItem closeItem = new java.awt.MenuItem("Close"); closeItem.addActionListener(closeListener); popup.add(closeItem); /// ... add other items // construct a TrayIcon trayIcon = new TrayIcon(image, "GED Desktop", popup); // set the TrayIcon properties trayIcon.addActionListener(showListener); // ... // add the tray image try { tray.add(trayIcon); } catch (AWTException e) { System.out.println(e); } // ... } } public void showProgramIsMinimizedMsg() { if (firstTime) { trayIcon.displayMessage("Some message.", "Some other message.", TrayIcon.MessageType.INFO); firstTime = false; } } private void hide(final Stage stage) { Platform.runLater(new Runnable() { @Override public void run() { if (SystemTray.isSupported()) { stage.hide(); // showProgramIsMinimizedMsg(); } else { System.exit(0); } } }); } public static void main(String[] args) { launch(args); } }
Merci de votre aide!
Partager