Path: csiph.com!news.mixmin.net!aioe.org!.POSTED!not-for-mail From: "Dr.UgoGagliardelli" Newsgroups: it.comp.java Subject: Re: da package a jframe Date: Mon, 26 Oct 2015 09:24:56 +0100 Organization: Aioe.org NNTP Server Lines: 73 Message-ID: References: NNTP-Posting-Host: uQ8aIFgByAQ/Ub1qVJw7uQ.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15; format=flowed Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 X-Notice: Filtered by postfilter v. 0.8.2 Xref: csiph.com it.comp.java:8728 Il 25.10.2015 23.09, Gulp® ha scritto: > Il 21/10/15 03:08, Dr.UgoGagliardelli ha scritto: >> Questa sinceramente non l'ho capita per niente. >> >> L'hai gia' detto qualche altra volta, ma non ci ho fatto caso: cosa >> intendi per "trovandomi in un package"? > > Probabilmente č un modo di pensare che mi porto dal basic, li se scrivo > in un modulo pippo.bas, riesco a "vedere" e richiamare le altre > procedure quando sono dichiarate Public anche senza fare import pippo.bas > >> E "Mica posso importare MENU!" secondo il tuo modo di vedere cosa >> significa? > > Per poter utilizzare (vedere) delle classi dichiarate nei package devo > fare un import: > > import pubblico.Ini; //č una classe con cui scrivo e leggo un file .ini > import pubblico.Uty; // sono varie utility che richiamo al bisogno. > > Se sto scrivendo del codice dentro una classe KeyTab che si trova in un > package che ho chiamato pubblico, la scrittura: > > Frame fm= new MENU(); > fm.setVisible(true); > > mi da errore: cannot find symbol, symbol: class MENU, location class KeyTab > > Eppure la class MENU č dichiarata public: > public class MENU extends javax.swing.JFrame { > > e, come dicevo, non posso fare import. > la class MENU č main class dell'applicazione. > > Dopo aver letto il tuo post, avevo pensato di arrivarci a ritroso: > Container c=f.getParent(); > Component p[]=c.getComponents(); > f.dispose(); > //ciclo p in cerca del form MENU > for( Component fs : p ) { > if (fs.getName().equals("MENU")){ > fs.setVisible(true); > break; > } > ... > ma non č corretto. Ho controllato, quell'array č in realtą vuoto. > Intanto, se precedentemente la proprieta' name di fs non e' stata impostata a qualcosa diverso da null tramite il metodo setName, fs.getName() ritorna null, quindi fs.getName().equals("MENU") da' NullPointerException perche' non puoi mai chiamare un metodo d'istanza su un oggetto null. Per evitare il NullPointerException dovresti invertire il test, ovvero "MENU".equals(fs.getName()), in modo se fs.getName() e' null il test ritorna false. Inoltre, per risalire la catena dei parent dovresti chiamare getParent() ricorsivamente, ad esempio: Container c=f.getParent(); Component menu = null; while (c != null && menu == null) { Component p[]=c.getComponents(); for( Component fs : p ) if ("MENU".equals(fs.getName())) menu = fs; c = c.getParent(); } if (menu != null) menu.setVisible(true); che direi che sia piu' o meno la stessa cosa che fa SwingUtilities.getWindowAncestor con la differenza che cerca un Container istanza di Window.