Error class is a subclass of Throwable, so currently the code throw an Error 
and immediately catch it, then print stack trace.

> 
> Hi Sergey, The below marked stack trace would be hit if there is any 
> exception raised while creating the Error object in the try block. But the 
> user would still get the stack trace if the exception is not handled because 
> the Error calls base class function of Throwable:
>  
>     public Throwable(String message) {
>         fillInStackTrace();
>         detailMessage = message;
>     }
>   <>
> The stack trace would be printed by the above code in Throwable 
> implementation. I believe it is inevitable to print this because this is one 
> of the basic level implementation and we do have an unhandled exception. And 
> I don’t think I should do any change in here. Please let me know if you think 
> otherwise.
>  
> I have attached the test file which I used to test the user level effects. 
> The user won’t be able to use the expressions like  this 
> (if(UIManager.getUI(comp) == null)) as mentioned in the JIRA bug but he will 
> be able to use the below catching code:
> try {
>     System.out.println("Updating UI");
>     UIManager.getUI(comp);
> } catch (Exception e) {
>     System.out.println("GetUI is null");
>     System.out.println(e.getMessage());
> }
>  
> The output of this is as follows:
> Updating UI
> GetUI is null
> Null
>  
> If the there is no exception catch performed then it would have the below 
> output:
> LAF State: [Custom LAF - CustomUI$1],LAF Class: 
> com.sun.java.swing.plaf.windows.WindowsLookAndFeel
> Exception in thread "main" java.lang.NullPointerException
>                at 
> java.desktop/javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:131)
>                at 
> java.desktop/javax.swing.UIDefaults.getUI(UIDefaults.java:790)
>                at 
> java.desktop/javax.swing.UIManager.getUI(UIManager.java:1065)
>                at CustomUI.main(CustomUI.java:50)
>  
> Process finished with exit code 1
>  
> Please let me know if any part of my analysis is wrong or skewed.
>  
> Thanks and regards,
> Shashi
>  
> -----Original Message-----
> From: Sergey Bylokhov 
> Sent: Saturday, June 17, 2017 1:22 AM
> Cc: Shashidhara Veerabhadraiah <shashidhara.veerabhadra...@oracle.com 
> <mailto:shashidhara.veerabhadra...@oracle.com>>; swing-dev 
> <swing-dev@openjdk.java.net <mailto:swing-dev@openjdk.java.net>>; Philip Race 
> <philip.r...@oracle.com <mailto:philip.r...@oracle.com>>; Semyon Sadetsky 
> <semyon.sadet...@oracle.com <mailto:semyon.sadet...@oracle.com>>
> Subject: Re: <Swing Dev> [10] RFR JDK-6267105:UIDefaults.getUIError dumps 
> error message to System.err and also throws Error.
>  
> Hi, Shashi.
> Can you please clarify the purpose of this fix, because the bug states that 
> the code prints traceback to the system.err, even if the user tries to 
> catch/suppress an exception.
> The current fix removed the system.err logging but the code which print trace 
> still there:
>     protected void getUIError(String msg) {
>         try {
>             throw new Error(msg);
>         }
>         catch (Throwable e) {
>             e.printStackTrace();
>         }
>     }
> >> Through catching the error, the user can perform necessary recovery 
> >> actions without cluttering the system.err
>  
> I am not sure that the user is able to catch this error. So what is the 
> difference when we had an additional message before and after the fix?
>  
> > 
> > +1
> > 
> > --Semyon
> > 
> > 
> > On 06/12/2017 03:54 AM, Shashidhara Veerabhadraiah wrote:
> >> Hi All,
> >>           Please review the code bug fix for 
> >> JDK-6267105:UIDefaults.getUIError dumps error message to System.err and 
> >> also throws Error.
> >> 
> >> Issue:
> >>      Error message was getting dumped to the system.err even though the 
> >> recovery actions were performed leading to unnecessary confusion regarding 
> >> the actual behavior.
> >> 
> >> Fix:
> >>     This fix removes the call which prints the message to the system.err 
> >> and stores the message in the Error class. This same message can be 
> >> retrieved after we catch the error and calling getMessage() of the Error 
> >> class. Through catching the error, the user can perform necessary recovery 
> >> actions without cluttering the system.err. This fix does not modifies the 
> >> 'user effect' as the user would still get the same error as they were 
> >> getting before this fix.
> >> 
> >> Test:
> >>     Now the system.err does not get cluttered though we performed the 
> >> necessary recovery actions. The error message string can be recovered by 
> >> calling getMessage() if needed.
> >>    Bug:
> >> https://bugs.openjdk.java.net/browse/JDK-6267105 
> >> <https://bugs.openjdk.java.net/browse/JDK-6267105>
> >> 
> >> Webrev:
> >> http://cr.openjdk.java.net/~aghaisas/shashi/6267105/webrev_00/ 
> >> <http://cr.openjdk.java.net/~aghaisas/shashi/6267105/webrev_00/>
> >> 
> >> Thanks and regards,
> >> Shashi
> > 
>  
>  
> <CustomUI.JAVA>

Reply via email to