On Tue, 21 Nov 2023 08:37:45 GMT, Abhishek Kumar <[email protected]> wrote:

> `boolean` variable is changed to local variable. Others are used in EDT and 
> other method, so kept it as class variables.

Do they need to be? I mean you can do everything on EDT, even throw the 
exception from there. It could something like this:


public class TestProgressBarBorder {
    public static void main(String[] args) throws Exception {
        for (UIManager.LookAndFeelInfo laf :
                UIManager.getInstalledLookAndFeels()) {
            if (!laf.getName().contains("Nimbus") && 
!laf.getName().contains("GTK")) {
                continue;
            }
            System.out.println("Testing LAF: " + laf.getName());
            SwingUtilities.invokeAndWait(() -> test(laf));
        }
    }

    private static void test(UIManager.LookAndFeelInfo laf) {
        setLookAndFeel(laf);

        JProgressBar progressBar = createProgressBar();
        progressBar.setBorderPainted(true);
        BufferedImage withBorder = paintToImage(progressBar);
        progressBar.setBorderPainted(false);
        BufferedImage withoutBorder = paintToImage(progressBar);

        boolean equal = Util.compareBufferedImages(withBorder, withoutBorder);
        if (equal) {
            try {
                ImageIO.write(withBorder, "png", new File("withBorder.png"));
                ImageIO.write(withoutBorder, "png", new 
File("withoutBorder.png"));
            } catch (IOException ignored) {}
            throw new RuntimeException("JProgressBar border is painted when 
border\n" +
                                       " painting is set to false");
        }
    }

    private static JProgressBar createProgressBar() {
        JProgressBar progressBar = new JProgressBar();
        progressBar.setSize(100, 50);
        progressBar.setValue(0);
        progressBar.setStringPainted(true);
        return progressBar;
    }


Because the exception is thrown from EDT, the exception thrown from main is 
`InvocationTargetException`, yet the CI will still show you the cause. If you 
want to avoid it, you can return the boolean value from the `test` method.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/16467#discussion_r1400695948

Reply via email to