Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #39962

Re: Java 21 and [this-escape] warnings?

From Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: Java 21 and [this-escape] warnings?
Date 2023-06-10 13:46 +0200
Organization A noiseless patient Spider
Message-ID <u61nr4$29s54$1@dont-email.me> (permalink)
References <u60jra$2275l$1@dont-email.me>

Show all headers | View raw


On 10/06/2023 03:32, Knute Johnson wrote:
> I've been playing with Java21ea getting ready for its release this fall 
> and have found some warnings that I don't really know how to deal with. 
> I understand why you don't want 'this' escaping the constructor but I 
> don't understand how Java21 think that a lot of the methods we have 
> always used are going to cause that to happen.  Please see the code 
> below and the script to compile it.  I've commented out several lines 
> but you can un-comment them and see the warnings from the compiler.  The 
> first one that I really don't understand is 
> Frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE).  I would appreciate 
> any comments or maybe I just don't know what I'm doing and there is a 
> better way.  If so please feel free to critique.  It compiles and will 
> run but not work correctly with the lines commented out.  Put them back 
> in and compile them to see the warnings.
> 
> 
> import java.awt.*;
> import java.awt.event.*;
> import javax.swing.*;
> import javax.swing.border.*;
> 
> public class test extends JFrame {
>      private static final long serialVersionUID = 1L;
> 
>      public test() {
>          super("test");
>          //setLayout(new GridBagLayout());  // [this-escape]
>          //setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);  // 
> [this-escape]
> 
>          GridBagConstraints c = new GridBagConstraints();
> 
>          JLabel l = new JLabel("this is a JLabel");
>          l.setBorder(new EmptyBorder(20,20,20,20));  // [this-escape] 
> sometimes
>          //add(l,c);  // [this-escape]
>          //add(l);  // [this-escape]
>      }
> 
>      public static void main(String[] args) {
>          EventQueue.invokeLater(() -> {
>              test t = new test();
>              t.addWindowListener(new WindowAdapter() {
>                  public void windowClosing(WindowEvent we) {
>                      t.dispose();
>                  }
>              });
>              t.pack();
>              t.setVisible(true);
>          });
>      }
> }

Hi Knute,

Still Swing-ing? :-)

These errors/warning make perfect sense to me (bar one): you're 
manipulating the object tree before the constructor's end.

I reckon the reason #setDefaultCloseOperation gets flagged is that it 
potentially fires a PropertyChangeEvent, the source of which is your 
Frame. It wouldn't fire if there are no listeners attached, but the 
compiler probably can't (or can't be arsed to) infer that.

The one I don't get (and haven't been able to reproduce) is the 
#setBorder call.

Is [this-escape] a warning/error that's been specifically added in 
JDK21? I reckon the problem itself isn't new or changed, and that it's 
always been there.

As such, you would have two choices, as before: ignore the warning or 
change your habits.

For illustration, with Swing I'd made it a habit to construct my UI in 
#addNotify, for self-constructing components. That wouldn't be 
applicable to the frame, which you could for instance construct 
externally (I mean in a factory) with a self-constructing content pane.

Regards,

-- 
DF.

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Java 21 and [this-escape] warnings? Knute Johnson <knute2023@585ranch.com> - 2023-06-09 20:32 -0500
  Re: Java 21 and [this-escape] warnings? Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2023-06-10 13:46 +0200
    Re: Java 21 and [this-escape] warnings? Knute Johnson <knute2023@585ranch.com> - 2023-06-10 13:23 -0500
      Re: Java 21 and [this-escape] warnings? Daniele Futtorovic <da.futt.news@laposte-dot-net.invalid> - 2023-06-11 14:45 +0200
  Re: Java 21 and [this-escape] warnings? Eric Sosman <donalhambra@gmail.com> - 2023-06-10 06:58 -0700
    Re: Java 21 and [this-escape] warnings? Knute Johnson <knute2023@585ranch.com> - 2023-06-10 13:26 -0500
  Re: Java 21 and [this-escape] warnings? Arne Vajhøj <arne@vajhoej.dk> - 2023-06-10 18:57 -0400

csiph-web