RFR: 6429812: NPE after calling JTable.updateUI() when using a header renderer + XP L&F [v3]

Tejesh R duke at openjdk.java.net
Tue May 31 09:43:05 UTC 2022


On Tue, 31 May 2022 09:29:59 GMT, Alexey Ivanov <aivanov at openjdk.org> wrote:

>>> Can't the test be automated?
>>> 
>>> Can you paint the table to a BufferredImage and catch the NPE?
>>> 
>>> Alternatively, if the above can't be done, you can use [Thread.setUncaughtExceptionHandler](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Thread.html#setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)) to set [UncaughtExceptionHandler](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Thread.UncaughtExceptionHandler.html) for the EDT and catch NPE.
>>> 
>>> If NPE is thrown, the test fails.
>> 
>> Yeah, wanted to change to automatic, but wasn't sure about whether its ok for NPE check or not. Actually if the current test executes then its a pass right......? Painting it to bufferedImage and then catching NPE is required........?
>
>> Yeah, wanted to change to automatic, but wasn't sure about whether its ok for NPE check or not.
> 
> What can be wrong with it? It's just a regular test. If you can automate the test, you should.
> 
>> Actually if the current test executes then its a pass right......?
> 
> I don't understand your question, sorry. What surprises me is that the test fails automatically without the fix. But I can't see how the NPE is re-thrown on the main thread.
> 
> I thought the NPE would be just printed in the jtreg log file and the tester wouldn't even see it.
> 
> So your test is already automated to some extent. What we want is to make it pass automatically if NPE isn't thrown.
> 
>> Painting it to bufferedImage and then catching NPE is required........?
> 
> No, it's not, however, I think it's a more effective way than showing UI. The exception occurs when `paint` is called. Painting to `BufferedImage` gives you control when and how `paint` is called: you do it _explicitly_. So you wrap the call to `paint` in a try-catch block, if the exception is thrown you re-throw it on main thread to fail the test; if the exception isn't thrown, the test completed successfully. Perhaps, try-catch block isn't necessary, just let the exception propagate.

> _Actually if the current test executes then its a pass right......?_ This means, if there is no NPE raised then its a pass case right.......? Yeah to some extent it is automatic, I actually didn't get how to handle the caught NPE, so just left it so that the Test case will be failed by NPE.

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

PR: https://git.openjdk.java.net/jdk/pull/8830



More information about the client-libs-dev mailing list