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