Skip to content

Commit bb63b4f

Browse files
committed
Fixed notifications synchronization, fixed handling exceptions & added missing logging
1 parent 0d2f962 commit bb63b4f

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

visualvm/core/src/org/graalvm/visualvm/core/ui/DataSourceWindow.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
import java.util.Collections;
3939
import java.util.List;
4040
import java.util.Objects;
41+
import java.util.logging.Level;
42+
import java.util.logging.Logger;
4143
import javax.swing.JPanel;
4244
import javax.swing.SwingUtilities;
4345
import org.openide.util.RequestProcessor;
@@ -53,6 +55,8 @@ class DataSourceWindow extends TopComponent implements PropertyChangeListener {
5355
private static final RequestProcessor PROCESSOR =
5456
new RequestProcessor("DataSourceWindow Processor", 5); // NOI18N
5557

58+
private static final Logger LOGGER = Logger.getLogger(DataSourceWindow.class.getName());
59+
5660
private int viewsCount = 0;
5761
private DataSource dataSource;
5862
private DataSourceDescriptor dataSourceDescriptor;
@@ -145,15 +149,18 @@ public void removeView(final DataSourceView view) {
145149
}
146150

147151
PROCESSOR.post(new Runnable() {
148-
public void run() { view.viewRemoved(); }
152+
public void run() {
153+
try { view.viewRemoved(); }
154+
catch (Exception e) { LOGGER.log(Level.WARNING, "Failed notifying removed view " + view, e); } // NOI18N
155+
}
149156
});
150157

151158
DataSourceWindowManager.sharedInstance().unregisterClosedView(view);
152159
viewsCount--;
153160
if (viewsCount == 0 && isOpened()) close();
154161
}
155162

156-
void clearView(final DataSourceView view) {
163+
void clearView(final DataSourceView view, RequestProcessor notificationProcessor) {
157164
if (viewsCount == 1 && Objects.equals(singleViewContainer.getName(), view.getName())) {
158165
singleViewContainer.removeAll();
159166
if (singleViewContainer.getCaption() != null) singleViewContainer.getCaption().finish();
@@ -167,8 +174,11 @@ void clearView(final DataSourceView view) {
167174
tabbedContainer.clearView(viewIndex);
168175
}
169176

170-
PROCESSOR.post(new Runnable() {
171-
public void run() { view.viewRemoved(); }
177+
notificationProcessor.post(new Runnable() {
178+
public void run() {
179+
try { view.viewRemoved(); }
180+
catch (Exception e) { LOGGER.log(Level.WARNING, "Failed notifying removed view " + view, e); } // NOI18N
181+
}
172182
});
173183
}
174184

@@ -193,7 +203,10 @@ void updateView(final DataSourceView view, int index) {
193203
}
194204

195205
PROCESSOR.post(new Runnable() {
196-
public void run() { view.viewAdded(); }
206+
public void run() {
207+
try { view.viewAdded(); }
208+
catch (Exception e) { LOGGER.log(Level.WARNING, "Failed post-initialize view " + view, e); } // NOI18N
209+
}
197210
});
198211
}
199212

visualvm/core/src/org/graalvm/visualvm/core/ui/DataSourceWindowManager.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ public void run() {
387387
public void run() {
388388
final Set<DataSourceView> opened = openedViews.get(dataSource);
389389
for (DataSourceView view : oldViews.values()) {
390-
window.clearView(view);
390+
window.clearView(view, processor);
391391
opened.remove(view);
392392
}
393393

@@ -396,7 +396,8 @@ public void run() {
396396
final List<? extends DataSourceView> newViews = DataSourceViewsManager.sharedInstance().getViews(dataSource);
397397
for (DataSourceView view : newViews) {
398398
opened.add(view);
399-
view.viewWillBeAdded();
399+
try { view.viewWillBeAdded(); }
400+
catch (Exception e) { LOGGER.log(Level.SEVERE, "Failed to pre-initialize view " + view, e); } // NOI18N
400401
oldViews.remove(view.getName());
401402
}
402403
if (opened.isEmpty()) openedViews.remove(dataSource);

0 commit comments

Comments
 (0)