Skip to content

Commit b4c4cde

Browse files
committed
feat: modernized tda ui
1 parent f8c0267 commit b4c4cde

File tree

19 files changed

+155
-121
lines changed

19 files changed

+155
-121
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>de.grimmfrost.tda</groupId>
77
<artifactId>tda-parent</artifactId>
8-
<version>2.6</version>
8+
<version>2.7</version>
99
<packaging>pom</packaging>
1010

1111
<name>TDA Parent</name>

tda/dependency-reduced-pom.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<artifactId>tda-parent</artifactId>
55
<groupId>de.grimmfrost.tda</groupId>
6-
<version>2.6</version>
6+
<version>2.7</version>
77
</parent>
88
<modelVersion>4.0.0</modelVersion>
99
<artifactId>tda</artifactId>
@@ -12,7 +12,17 @@
1212
<build>
1313
<resources>
1414
<resource>
15+
<filtering>true</filtering>
1516
<directory>src/main/resources</directory>
17+
<includes>
18+
<include>**/version.properties</include>
19+
</includes>
20+
</resource>
21+
<resource>
22+
<directory>src/main/resources</directory>
23+
<excludes>
24+
<exclude>**/version.properties</exclude>
25+
</excludes>
1626
</resource>
1727
</resources>
1828
<plugins>

tda/pom.xml

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>de.grimmfrost.tda</groupId>
77
<artifactId>tda-parent</artifactId>
8-
<version>2.6</version>
8+
<version>2.7</version>
99
</parent>
1010

1111
<artifactId>tda</artifactId>
@@ -30,6 +30,16 @@
3030
we might need to see if it's available in central or use a system scope if necessary.
3131
Actually, it's often available as part of the JDK.
3232
-->
33+
<dependency>
34+
<groupId>com.formdev</groupId>
35+
<artifactId>flatlaf</artifactId>
36+
<version>3.3</version>
37+
</dependency>
38+
<dependency>
39+
<groupId>com.formdev</groupId>
40+
<artifactId>flatlaf-extras</artifactId>
41+
<version>3.3</version>
42+
</dependency>
3343
<dependency>
3444
<groupId>com.google.code.gson</groupId>
3545
<artifactId>gson</artifactId>
@@ -47,6 +57,17 @@
4757
<resources>
4858
<resource>
4959
<directory>src/main/resources</directory>
60+
<filtering>true</filtering>
61+
<includes>
62+
<include>**/version.properties</include>
63+
</includes>
64+
</resource>
65+
<resource>
66+
<directory>src/main/resources</directory>
67+
<filtering>false</filtering>
68+
<excludes>
69+
<exclude>**/version.properties</exclude>
70+
</excludes>
5071
</resource>
5172
</resources>
5273
<plugins>

tda/src/main/java/de/grimmfrost/tda/Analyzer.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
package de.grimmfrost.tda;
2424

25+
import de.grimmfrost.tda.utils.PrefManager;
2526
import java.io.Serializable;
2627

2728
/**
@@ -57,48 +58,51 @@ public String analyzeDump() {
5758
int overallThreadsWaitingWithoutLocks = tdi.getOverallThreadsWaitingWithoutLocksCount();
5859
int monitorsWithoutLocksCount = tdi.getMonitorsWithoutLocks() == null ? 0 : tdi.getMonitorsWithoutLocks().getNodeCount();
5960

61+
String altRowColor = "#cccccc";
62+
String textColor = "#333333";
63+
String linkColor = "#0056b3";
64+
6065
// check if a lot of threads are in state "waiting"
6166
if ((deadlocks == 0) && (threadCount > 0) && ((waiting / (threadCount / 100.0)) > 10.0)) {
6267
statData.append("<tr bgcolor=\"#ffffff\"<td></td></tr>");
63-
statData.append("<tr bgcolor=\"#cccccc\"><td colspan=2><font face=System " +
64-
"><p>" + (int) (waiting / (threadCount / 100.0)) + "% of all threads are waiting for a monitor to become available again.</p><br>");
68+
statData.append("<tr bgcolor=\"").append(altRowColor).append("\"><td colspan=2><font face=System color=\"").append(textColor).append("\"><p>")
69+
.append((int) (waiting / (threadCount / 100.0))).append("% of all threads are waiting for a monitor to become available again.</p><br>");
6570
statData.append("This might indicate a congestion or even a deadlock. If a monitor doesn't have a locking thread, it might be<br>");
66-
statData.append("hold by some external resource or system thread. You should check the <a href=\"wait://\">waiting threads</a>.<br></td></tr>");
71+
statData.append("hold by some external resource or system thread. You should check the <a style=\"color: ").append(linkColor).append(";\" href=\"wait://\">waiting threads</a>.<br></td></tr>");
6772
} else if (deadlocks > 0) {
6873
statData.append("<tr bgcolor=\"#ffffff\"<td></td></tr>");
69-
statData.append("<tr bgcolor=\"#cccccc\"><td colspan=2><font face=System " +
70-
"><p>The JVM has detected " + deadlocks + " deadlock(s) in the thread dump. You should check the <br><a href=\"dead://\">deadlocks</a> for further information.</p><br>");
74+
statData.append("<tr bgcolor=\"").append(altRowColor).append("\"><td colspan=2><font face=System color=\"").append(textColor).append("\"><p>The JVM has detected ")
75+
.append(deadlocks).append(" deadlock(s) in the thread dump. You should check the <br><a style=\"color: ").append(linkColor).append(";\" href=\"dead://\">deadlocks</a> for further information.</p><br>");
7176
}
7277

7378
// check if a lot of threads are in state "waiting"
7479
if ((threadCount > 0) && ((sleeping / (threadCount / 100.0)) > 25.0)) {
7580
statData.append("<tr bgcolor=\"#ffffff\"<td></td></tr>");
76-
statData.append("<tr bgcolor=\"#cccccc\"><td colspan=2><font face=System" +
77-
"><p>" + (int) (sleeping / (threadCount / 100.0)) + "% of all threads are sleeping on a monitor.</p><br>");
81+
statData.append("<tr bgcolor=\"").append(altRowColor).append("\"><td colspan=2><font face=System color=\"").append(textColor).append("\"><p>")
82+
.append((int) (sleeping / (threadCount / 100.0))).append("% of all threads are sleeping on a monitor.</p><br>");
7883
statData.append("This might indicate they are waiting for some external resource (e.g. database) which is overloaded<br>");
7984
statData.append("or not available or are just waiting to get to do something (idle threads).<br>");
80-
statData.append("You should check the <a href=\"sleep://\">sleeping threads</a> with a filter excluding all idle threads.</td></tr>");
85+
statData.append("You should check the <a style=\"color: ").append(linkColor).append(";\" href=\"sleep://\">sleeping threads</a> with a filter excluding all idle threads.</td></tr>");
8186
}
8287

8388
// display an info if there are monitors without locking threads
8489
if (monitorsWithoutLocksCount > 0) {
8590
statData.append("<tr bgcolor=\"#ffffff\"<td></td></tr>");
86-
statData.append("<tr bgcolor=\"#cccccc\"><td colspan=2><font face=System" +
87-
"><p>This thread dump contains monitors without a locking thread information.<br>");
91+
statData.append("<tr bgcolor=\"").append(altRowColor).append("\"><td colspan=2><font face=System color=\"").append(textColor).append("\"><p>This thread dump contains monitors without a locking thread information.<br>");
8892
statData.append("This means, the monitor is hold by a system thread or some external resource.</p<br>");
8993
statData.append("You should check the monitors without locking threads for more information.<br></td></tr>");
9094
}
9195

9296
// check for indications for running garbage collector
9397
if ((threadCount > 0) && (overallThreadsWaitingWithoutLocks / (threadCount / 100.0) > 50.0)) {
9498
statData.append("<tr bgcolor=\"#ffffff\"<td></td></tr>");
95-
statData.append("<tr bgcolor=\"#cccccc\"><td colspan=2><font face=System " +
96-
"<p>" + (int) (overallThreadsWaitingWithoutLocks / (threadCount / 100.0)) + "% of all threads are waiting for a monitor without a application ");
99+
statData.append("<tr bgcolor=\"").append(altRowColor).append("\"><td colspan=2><font face=System color=\"").append(textColor).append("\"><p>")
100+
.append((int) (overallThreadsWaitingWithoutLocks / (threadCount / 100.0))).append("% of all threads are waiting for a monitor without a application ");
97101
statData.append("thread holding it.<br> This indicates a congestion. It is very likely the garbage collector is running ");
98102
statData.append("and is blocking the monitors.</p<br>");
99103
statData.append("You should check the monitors without locking threads for more information on the blocked threads.<br>");
100104
statData.append("You also should analyze the garbage collector behaviour. Go to the ");
101-
statData.append("<a href=\"http://www.tagtraum.com/gcviewer.html\">GCViewer-Homepage</a> for more<br>");
105+
statData.append("<a style=\"color: ").append(linkColor).append(";\" href=\"http://www.tagtraum.com/gcviewer.html\">GCViewer-Homepage</a> for more<br>");
102106
statData.append(" information on how to do this.</td></tr>");
103107
}
104108

tda/src/main/java/de/grimmfrost/tda/InfoDialog.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
package de.grimmfrost.tda;
2323

24+
import de.grimmfrost.tda.utils.AppInfo;
2425
import java.awt.BorderLayout;
2526
import java.awt.FlowLayout;
2627
import java.awt.event.ActionEvent;
@@ -53,17 +54,17 @@ private void initPanel() {
5354
upperLayout.setVgap(10);
5455
upperLayout.setHgap(10);
5556
JPanel upperPane = new JPanel(upperLayout);
56-
upperPane.add(new JLabel(TDA.createImageIcon("tda-logo.png")), BorderLayout.CENTER);
57+
upperPane.add(new JLabel(TDA.createImageIcon("splash.png")), BorderLayout.CENTER);
5758
upperPane.add(new JLabel(" "), BorderLayout.EAST);
5859
upperPane.add(new JLabel(" "), BorderLayout.WEST);
5960
upperPane.add(new JLabel(""), BorderLayout.NORTH);
6061
upperPane.add(new JLabel(""), BorderLayout.SOUTH);
6162
getContentPane().add(upperPane, BorderLayout.NORTH);
6263

6364
String info = "<html><body>" +
65+
"<h3>" + AppInfo.getAppInfo() + " v" + AppInfo.getVersion() + "</h3>" +
6466
"<p><i>Java Version: " + System.getProperty("java.version") + "<br><br>" +
65-
"(C) 2006-2020 by Ingo Rockel &lt;ingo.rockel@gmail.com&gt;,<br>" +
66-
"with contributions from Robert Whitehurst &lt;maestoso@java.net&gt;.<br><br>" +
67+
"(C) 2006-2026 by Ingo Rockel &lt;ingo.rockel@gmail.com&gt;,<br><br>" +
6768
"Icons used are based on Benno System Icons by Benno Meyer.<br>" +
6869
"Welcome screen uses icons from NuoveXT2 icon set by Alexandre Moore.<br>" +
6970
"Contains classes from JEdit for logfile display.</i></p><br>" +

tda/src/main/java/de/grimmfrost/tda/MainMenu.java

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import de.grimmfrost.tda.utils.PrefManager;
2626
import de.grimmfrost.tda.utils.ResourceManager;
2727
import java.awt.event.ActionEvent;
28+
import java.awt.event.InputEvent;
2829
import java.awt.event.KeyEvent;
2930
import javax.swing.JButton;
3031
import javax.swing.JCheckBoxMenuItem;
@@ -150,7 +151,6 @@ private JMenu createFileMenu() {
150151
//a group of JMenuItems
151152
menuItem = new JMenuItem(ResourceManager.translate("file.open"),
152153
KeyStroke.getKeyStroke(ResourceManager.translate("file.open.mnem")).getKeyCode());
153-
menuItem.setIcon(TDA.createImageIcon("FileOpen.png"));
154154
menuItem.setAccelerator(KeyStroke.getKeyStroke(
155155
ResourceManager.translate("file.open.accel")));
156156
menuItem.getAccessibleContext().setAccessibleDescription(
@@ -160,7 +160,6 @@ private JMenu createFileMenu() {
160160

161161
closeMenuItem = new JMenuItem(ResourceManager.translate("file.close"),
162162
KeyStroke.getKeyStroke(ResourceManager.translate("file.close.mnem")).getKeyCode());
163-
closeMenuItem.setIcon(TDA.createImageIcon("CloseFile.png"));
164163
closeMenuItem.getAccessibleContext().setAccessibleDescription(
165164
ResourceManager.translate("file.open.description"));
166165
closeMenuItem.addActionListener(listener);
@@ -181,7 +180,6 @@ private JMenu createFileMenu() {
181180
menu.addSeparator();
182181
menuItem = new JMenuItem(ResourceManager.translate("file.getfromclipboard"),
183182
KeyStroke.getKeyStroke(ResourceManager.translate("file.getfromclipboard.mnem")).getKeyCode());
184-
menuItem.setIcon(TDA.createImageIcon("Empty.gif"));
185183
menuItem.getAccessibleContext().setAccessibleDescription(
186184
ResourceManager.translate("file.getfromclipboard.description"));
187185
menuItem.setAccelerator(KeyStroke.getKeyStroke(
@@ -207,16 +205,18 @@ private JMenu createFileMenu() {
207205
createRecentSessionsMenu();
208206
menu.add(recentSessionsMenu);
209207

210-
menu.addSeparator();
208+
if (!System.getProperty("os.name").contains("Mac")) {
209+
menu.addSeparator();
211210

212-
menuItem = new JMenuItem(ResourceManager.translate("file.exit"),
213-
KeyStroke.getKeyStroke(ResourceManager.translate("file.exit.mnem")).getKeyCode());
214-
menuItem.setAccelerator(KeyStroke.getKeyStroke(
215-
ResourceManager.translate("file.exit.accel")));
216-
menuItem.getAccessibleContext().setAccessibleDescription(
217-
ResourceManager.translate("file.exit.description"));
218-
menuItem.addActionListener(listener);
219-
menu.add(menuItem);
211+
menuItem = new JMenuItem(ResourceManager.translate("file.exit"),
212+
KeyStroke.getKeyStroke(ResourceManager.translate("file.exit.mnem")).getKeyCode());
213+
menuItem.setAccelerator(KeyStroke.getKeyStroke(
214+
ResourceManager.translate("file.exit.accel")));
215+
menuItem.getAccessibleContext().setAccessibleDescription(
216+
ResourceManager.translate("file.exit.description"));
217+
menuItem.addActionListener(listener);
218+
menu.add(menuItem);
219+
}
220220

221221
return(menu);
222222

@@ -235,7 +235,6 @@ private JMenu createViewMenu() {
235235

236236
expandAllMenuItem = new JMenuItem(ResourceManager.translate("view.expand"),
237237
KeyStroke.getKeyStroke(ResourceManager.translate("view.expand.mnem")).getKeyCode());
238-
expandAllMenuItem.setIcon(TDA.createImageIcon("Expanded.png"));
239238
expandAllMenuItem.setAccelerator(KeyStroke.getKeyStroke(
240239
ResourceManager.translate("view.expand.accel")));
241240
expandAllMenuItem.getAccessibleContext().setAccessibleDescription(
@@ -246,7 +245,6 @@ private JMenu createViewMenu() {
246245

247246
collapseAllMenuItem = new JMenuItem(ResourceManager.translate("view.collapse"),
248247
KeyStroke.getKeyStroke(ResourceManager.translate("view.collapse.mnem")).getKeyCode());
249-
collapseAllMenuItem.setIcon(TDA.createImageIcon("Collapsed.png"));
250248
collapseAllMenuItem.setAccelerator(KeyStroke.getKeyStroke(
251249
ResourceManager.translate("view.collapse.accel")));
252250
collapseAllMenuItem.getAccessibleContext().setAccessibleDescription(
@@ -259,7 +257,6 @@ private JMenu createViewMenu() {
259257
menuItem = new JCheckBoxMenuItem(ResourceManager.translate("view.showtoolbar"), PrefManager.get().getShowToolbar());
260258
menuItem.setMnemonic(KeyStroke.getKeyStroke(ResourceManager.translate("view.showtoolbar.mnem")).getKeyCode());
261259
menuItem.addActionListener(listener);
262-
menuItem.setIcon(TDA.createImageIcon("Empty.gif"));
263260
menu.add(menuItem);
264261

265262
return(menu);
@@ -278,9 +275,8 @@ private JMenu createToolsMenu() {
278275

279276
longMenuItem = new JMenuItem(ResourceManager.translate("tools.longrunning"),
280277
KeyStroke.getKeyStroke(ResourceManager.translate("tools.longrunning.mnem")).getKeyCode());
281-
longMenuItem.setIcon(TDA.createImageIcon("FindLRThreads.png"));
282278
longMenuItem.setAccelerator(KeyStroke.getKeyStroke(
283-
KeyEvent.VK_L, ActionEvent.ALT_MASK));
279+
KeyEvent.VK_L, InputEvent.ALT_MASK));
284280
longMenuItem.getAccessibleContext().setAccessibleDescription(
285281
"Find long running threads...");
286282
longMenuItem.addActionListener(listener);
@@ -290,19 +286,17 @@ private JMenu createToolsMenu() {
290286

291287
menuItem = new JMenuItem("Filters",
292288
KeyEvent.VK_F);
293-
menuItem.setIcon(TDA.createImageIcon("Filters.png"));
294289
menuItem.setAccelerator(KeyStroke.getKeyStroke(
295-
KeyEvent.VK_F, ActionEvent.ALT_MASK));
290+
KeyEvent.VK_F, InputEvent.ALT_MASK));
296291
menuItem.getAccessibleContext().setAccessibleDescription(
297292
"Setup Filter");
298293
menuItem.addActionListener(listener);
299294
menu.add(menuItem);
300295

301296
menuItem = new JMenuItem("Categories",
302297
KeyEvent.VK_F);
303-
menuItem.setIcon(TDA.createImageIcon("CustomCat.png"));
304298
menuItem.setAccelerator(KeyStroke.getKeyStroke(
305-
KeyEvent.VK_G, ActionEvent.ALT_MASK));
299+
KeyEvent.VK_G, InputEvent.ALT_MASK));
306300
menuItem.getAccessibleContext().setAccessibleDescription(
307301
"Setup Categories");
308302
menuItem.addActionListener(listener);
@@ -312,21 +306,11 @@ private JMenu createToolsMenu() {
312306

313307
menuItem = new JMenuItem(ResourceManager.translate("file.preferences"),
314308
KeyStroke.getKeyStroke(ResourceManager.translate("file.preferences.mnem")).getKeyCode());
315-
menuItem.setIcon(TDA.createImageIcon("Preferences.png"));
316309
menuItem.getAccessibleContext().setAccessibleDescription(
317310
ResourceManager.translate("file.preferences.description"));
318311
menuItem.addActionListener(listener);
319312
menu.add(menuItem);
320313

321-
/*menu.addSeparator();
322-
323-
menuItem = new JMenuItem("Load Configuration Set...",
324-
KeyEvent.VK_F);
325-
menuItem.setIcon(TDA.createImageIcon("Empty.gif"));
326-
menuItem.getAccessibleContext().setAccessibleDescription(
327-
"Load Configuration Set");
328-
menuItem.addActionListener(listener);
329-
menu.add(menuItem);*/
330314
return(menu);
331315
}
332316

@@ -354,7 +338,6 @@ private JMenu createHelpMenu() {
354338
menu.addSeparator();
355339
menuItem = new JMenuItem("About TDA",
356340
KeyEvent.VK_A);
357-
menuItem.setIcon(TDA.createImageIcon("About.png"));
358341
menuItem.getAccessibleContext().setAccessibleDescription(
359342
"About Thread Dump Analyzer");
360343
menuItem.addActionListener(listener);
@@ -373,7 +356,7 @@ private void createRecentFileMenu() {
373356
recentFilesMenu.setMnemonic(KeyStroke.getKeyStroke(ResourceManager.translate("file.recentfiles.mnem")).getKeyCode());
374357
if(recentFiles.length > 1) {
375358
for(int i = 1; i < recentFiles.length; i++) {
376-
if(!recentFiles[i].equals("")) {
359+
if(!recentFiles[i].isEmpty()) {
377360
JMenuItem item = new JMenuItem(recentFiles[i]);
378361
((JMenu) recentFilesMenu).add(item);
379362
item.addActionListener(listener);
@@ -395,7 +378,7 @@ private void createRecentSessionsMenu() {
395378
if(recentFiles.length > 1) {
396379

397380
for(int i = 1; i < recentFiles.length; i++) {
398-
if(!recentFiles[i].equals("")) {
381+
if(!recentFiles[i].isEmpty()) {
399382
JMenuItem item = new JMenuItem(recentFiles[i]);
400383
((JMenu) recentSessionsMenu).add(item);
401384
item.addActionListener(listener);

0 commit comments

Comments
 (0)