Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #39962
| 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> |
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
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