Anonymní profil Aleš – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Aleš – Programujte.comAnonymní profil Aleš – Programujte.com

 

Příspěvky odeslané z IP adresy 2001:718:1c01:154:99f3:bd...–

Aleš
Java › Jak zjistit místo volání met…
15. 11. 2012   #166834

#1 Aleš
Tak kdyby to někoho zajímalo tak sem to pořešil takhle a vypadá to funkčně. Je to trochu něco jinýho než to v původnim dotazu. Následující kód zjistí název metody která volá tuto metodu a podle toho rozhoduje co provede. Kdyby měl někdo lepší řešení daného problému rád se přiučim :)

    public void setLayout(LayoutManager lm)
    {      
        StackTraceElement caller = Thread.currentThread().getStackTrace()[2];
        
        if(caller.getMethodName().compareTo("init")==0)        
        {super.setLayout(lm);}
        else
        {getPanel().setLayout(lm);}
    }
Aleš
Java › Jak zjistit místo volání met…
14. 11. 2012   #166832

Zdravim.

Mám možná trochu hloupej dotaz. Řekněme že mám metodu. Tato metoda je volána z kódu, ale nevím odkuď. Vím jen, kde je napsaná tato moje metoda. A já potřebuju zjistit kdo (jaký objekt) a odkud jí volá. Vlastně potřebuju něco jako krok zpět při debugování. Nevíte jak bych si mohl pomoci?

Předem díky za odpovědi.

Aleš
Java › nulovanie premenej
14. 11. 2012   #166746

#8 johnw
Ale to už tam stejně máš. U nějakých jazyků jako je např. C nebo možná C++ je nutné nulovat vytvořené proměnné, protože "int n;" alokuje paměť ale už ji nepřepíše, takže je tam náhodné číslo. Ale ty to tam máš, a  java si to nuluje sama mám dojem.

Pořád mi podle věty "Navíc jste zařadil opakování výpočtu a tím jste si "vyrobil" další chybu"  připadá, že to dotyčný pochopil tak že program pojede v nekonečné smyčce. Ty tam podle mě žádné opakování výpočtu nemáš. Pouze provádíš stejný kus kódu(to porovnávání) pro všechny čísla, což mi přijde v pořádku. Nejvíc ti k tomu asi řekne autor toho komentáře.

Aleš
Java › nulovanie premenej
14. 11. 2012   #166741

#5 sakal91
Co to znamená obecně bych věděl :) . Ale nechápu proč si to dotyčný(nejspíše učitel) žádá v tomhle programu, protože mi to tam nechybí. Program tak jak je napsanej funguje. Kdyby celej program běhal v nekonečnym cyklu aby po vypsání výsledku bylo možné zase zadat počet čísel a počítat znovu, tak tam bych to chápal. Ale tohle podle mě funguje, nevím kde to chce dotyčný nulovat, a co chce nulovat.

Jinak v komentáři má johnw napsaný kulatý závorky, takže na hranici nemůže bejt teoreticky i prakticky nic :) Proto je to trochu matoucí

Aleš
Java › nulovanie premenej
14. 11. 2012   #166735

#2 johnw
Tak sem si to pročetl (nezkoušel jsem to pustit), a co se myslí "nulováním proměnných" to nemám zdání. Jediný co nechápu je :

else if ((cislo==1)||(cislo==10)) {hranica++;									
interval++;}

když je číslo na hranici, tak už neni v intervalu ne? Jinak až na absenci komentářů mi to přijde v pohodě :)

Aleš
Java › Java swing: Přepsání metody…
14. 11. 2012   #166728

#25 Dano
Jj, takovej je víceméně účel. Asi se na to jak to dělám vy***** a udělám to podobně jako v odkazu který jsi mi posílal. Ale tak jak jsem to dělal mi to přijde víc ve stylu OOP, univerzálnější a vesměs i jednoduší. Bohužel ale nefunkční...

Aleš
Java › Java swing: Přepsání metody…
14. 11. 2012   #166721

#22 Aleš
Tak jsem sice míň ztracenej, ale stále bloudím. Když to upravíte podle Dana, zobrazí se vám formulář s menu? Mě se objeví formulář, ale je trochu nemocnej... :(

Aleš
Java › Java swing: Přepsání metody…
14. 11. 2012   #166720

#21 Dano
Promiň, já si nevšiml že jsi to tam ještě napsal. Díky moc. NullPointeru sem se zbavil, ale pořád to není ono. Objeví se okno, ale není tam vykreslené to menu. To už snad bude nějaká blbost na kterou snad přijdu. Ještě jednou díky všem :)

Aleš
Java › Java swing: Přepsání metody…
14. 11. 2012   #166718

#16 Dano
Problémem je , že nemůžu definici  :

Panel = new JPanel();

dát před  :

super(title)

neboť mi to začne nadávat že volání konstruktoru předka musí být na prvním místě

Aleš
Java › Java swing: Přepsání metody…
14. 11. 2012   #166716

l#15 sakal91

Právě že budu mít aplikaci s více různými formuláři. Řekněme že dělám aplikaci pro něco jako je výrobní(spíš repasovací) linka. Ta má několik stanovišť v dané posloupnosti(demontáž, rozpájení, čištění, pájení, montáž atd.) Ne však každý výrobek jde přes všechny stanice, nýbrž jeden jde přes stanice např. 1,2,5,6 a druhý pouze 1,3,4. Proto chci pro každou stanici vytvořit formulář. Problém je že každý formulář bude jiný, jediným stejným prvkem bude právě toto menu. A v souladu s OOP chci právě vytvořit formulář s tímto menu, a poté budu dědit od této třídy všechny další formuláře. S těma už bych mohl pracovat jako s normálním JFrame (přidávat prvky, nastavovat layout), ale přitom bych nepracoval s celými okny, ale pouze se zbytkem okna(panelem) pod zmíněným menu. Snad jsem to vysvětlil nějak srozumitelně :)

Aleš
Java › Java swing: Přepsání metody…
13. 11. 2012   #166710

#12 sakal91
Tak už chápu proč ti to jde :D Ty tam nemáš původce problému, a to metodu setLayout() :D

Aleš
Java › Java swing: Přepsání metody…
13. 11. 2012   #166706

#8 sakal91
Tak ani v Eclipsech to nejede, opět nullPointerEx...   Bylo by možný tě požádat jestli bys celej ten tvůj funkční projekt nezabalil a třeba přes uloz.to nebo leteckou postu poslal? zkusil bych ho bezezměny otevřít :)

Aleš
Java › Java swing: Přepsání metody…
13. 11. 2012   #166705

#8 sakal91
Zkoušim ty eclipse, ale chvíli to trvá, dlouho jsem s nima nedělal. Každopádně díky moc za pomoc. Jak na něco příjdu tak to sem hodim :)

Aleš
Java › Java swing: Přepsání metody…
13. 11. 2012   #166703

#6 sakal91
Mám tam něco navíc - 2 samostatný třídy. Ty ale nepoužívám, a když jsi napsal že ti to jde tak jsem založil novej projekt a zkusil tam nakopírovat pouze to co máš ty. A nešlo to

Aleš
Java › Java swing: Přepsání metody…
13. 11. 2012   #166701

#4 sakal91
Netbeans 7.1.2 . Kolega u kterýho jsem to zkoušel používá to samý. Zkusim eclipse

Aleš
Java › Java swing: Přepsání metody…
13. 11. 2012   #166685

#2 sakal91
Tak já udělal to samý, nakopíroval jsem to do novýho projektu a nullpointru sem se nezbavil. Zkoušel jsem to i u spolubydlícího na kompu a stejná vyjímka jako u mě :( Ještět někomu to fungovalo ?

Aleš
Java › Java swing: Přepsání metody…
13. 11. 2012   #166654

Zdravím.

Snažím se o vytvoření třídy rozšiřující JFrame. Mým cílem je mít třídu "FrameWithMenu", od které budou odvozeny všechny formuláře v programu. Jedinou změnou by mělo být, že potomek třídy "FrameWithMenu" bude formulář s menu v horní části. Víc Vám to asi osvětlí kód:

public class FrameWithMenu extends javax.swing.JFrame {

    protected JMenuBar MainMenuBar ;
    protected JMenu MainMenu;
    protected JPanel Panel;
   
    public FrameWithMenu(String title) throws HeadlessException {
        super(title);      
        super.setLayout(new BorderLayout());
       
        MainMenuBar = new JMenuBar();
        MainMenu = new JMenu("Menu");
       
        super.add(MainMenuBar, BorderLayout.NORTH);
        MainMenuBar.add(MainMenu);
        MainMenu.add(new JMenuItem("Item"));
       
        Panel = new JPanel();
        super.add(Panel);      
    }
   
    @Override
    public Component add(Component c)
    {
       return Panel.add(c);
    }
   
    @Override
    public void setLayout(LayoutManager lm)
    {
       this.Panel.setLayout(lm);
    }

Jde mi tedy o to aby potomek FrameWithMenu byl normální formulář s menu v horní části, a metody setLayout() a add() aby pracovali místo s celým formulářem pouze s panelem v něm vloženým.

Problém nastává u metody setLayout(). Při spuštění programu ve kterém vytvořím a zobrazím instanci této třídy se mi objeví nullPointerException. Mohl by mmi někdo poradit co dělám špatně? Obsah metody main a detail vyjímky viz níže:

public static void main(String[] args) {
        FrameWithMenu RBC = new FrameWithMenu("aa");       
        RBC.setVisible(true);
    }

Exception in thread "main" java.lang.NullPointerException
at GUI.FrameWithMenu.setLayout(FrameWithMenu.java:56)
at java.awt.Window.init(Window.java:492)
at java.awt.Window.<init>(Window.java:535)
at java.awt.Frame.<init>(Frame.java:420)
at javax.swing.JFrame.<init>(JFrame.java:224)
at GUI.FrameWithMenu.<init>(FrameWithMenu.java:29)
at Main.Main.main(Main.java:23)
Java Result: 1

Předem děkuji.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032021 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý