IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
mara
Člen
Avatar
mara:21.7.2014 19:38

Prosím, jak mám zavřít okno v Java Swingu, aniž bych ukončil celý program ?
Když se snažím za běhu programu dát

frame.setVisible(false);

tak mi to hodí toto:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at apka.NewClass$Act.actionPerformed(NewClass.java:67)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6505)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
        at java.awt.Component.processEvent(Component.java:6270)
        at java.awt.Container.processEvent(Container.java:2229)
        at java.awt.Component.dispatchEventImpl(Component.java:4861)
        at java.awt.Container.dispatchEventImpl(Container.java:2287)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
        at java.awt.Container.dispatchEventImpl(Container.java:2273)
        at java.awt.Window.dispatchEventImpl(Window.java:2719)
        at java.awt.Component.dispatchEvent(Component.java:4687)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
        at java.awt.EventQueue.access$200(EventQueue.java:103)
        at java.awt.EventQueue$3.run(EventQueue.java:694)
        at java.awt.EventQueue$3.run(EventQueue.java:692)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
        at java.awt.EventQueue$4.run(EventQueue.java:708)
        at java.awt.EventQueue$4.run(EventQueue.java:706)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Děkuji za rady

Odpovědět
21.7.2014 19:38
Co na srdci, to na Facebooku
Avatar
lincerix
Člen
Avatar
Odpovídá na mara
lincerix:22.7.2014 5:25

Ahoj,

frame.setVisi­ble(true)// Zobraz okno
frame.setVisi­ble(false)// nezobrazuj okno, ale proces je furt spuštěný, tím okno nevypneš
frame.setDefau­ltCloseOperati­on(EXIT_ON_CLO­SE);//Tohle je to co hledáš...

Nahoru Odpovědět
22.7.2014 5:25
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
Odpovídá na lincerix
Ladislav Ondris:22.7.2014 15:50
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

myslím, že tohle není to co hledá.. tohle mu vypne celý program, on chce jen, aby zmizelo okno programu, ale aby ten program zůstal stále spuštěný :)

Nahoru Odpovědět
22.7.2014 15:50
Pokud neděláš chyby, nepracuješ na dostatečně těžkých problémech.
Avatar
lincerix
Člen
Avatar
Odpovídá na Ladislav Ondris
lincerix:22.7.2014 16:30

Tak drbnout do Netbeansu za behu programu frame.setVisi­ble(false); je prasarna. Ale celkem zajimavy dotaz, zkusim poresit jak bude volno.

Nahoru Odpovědět
22.7.2014 16:30
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
mara
Člen
Avatar
mara:22.7.2014 16:57

Potřebuji když zmáčknu tlačítko, aby okno zmizelo. Dělám aplikaci Screenshot a potřebuji, než vyfotím obrazovku okno s nastavením Screenshotu nechat zmizet, aby v té fotce nebylo vidět.
Moc děkuji :)

Nahoru Odpovědět
22.7.2014 16:57
Co na srdci, to na Facebooku
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na mara
Atrament:22.7.2014 18:05

Máš ten frame inicializovaný ve chvíli kdy na něm voláš setVisible()? NullPointerEx­ception by napovídalo, že ne...

 
Nahoru Odpovědět
22.7.2014 18:05
Avatar
lincerix
Člen
Avatar
lincerix:22.7.2014 19:12

* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package helloworldd;

import java.awt.Grid­BagLayout;
import java.awt.Layou­tManager;
import java.awt.even­t.ActionEvent;
import java.awt.even­t.ActionListe­ner;
import javax.swing.JBut­ton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
*
* @author Lincerix
*/
public class HelloWorldd extends JFrame {

JFrame frame; Frame
JButton button;
Tlačítko
JPanel panel;//Panel na zarovnání, aby nevyplňovalo tlačítko celou plochu Framu

public HelloWorldd() {

panel = new JPanel(); Vytvoř panel
panel.setLayout(new GridBagLayout());
Nas­tav panelu rozestavení
button = new JButton("Visi­bleFalse");Vyt­voř tlačítko a pojmenuj ho
button.setBou­nds(20, 20, 20, 20);
Nastav tlačítko

frame = new JFrame(); Vytvoř frame
frame.setDefau­ltCloseOperati­on(EXIT_ON_CLO­SE);
Aby se frame zavíral
frame.setVisi­ble(true);Aby byl Frame vidět
frame.setSize(200, 300);
Rozměry Framu
button.addActi­onListener(údá­lost
new ActionListener() {
public void actionPerformed(Ac­tionEvent ae) {
frame.setVisi­ble(false);
}
}
);
panel.add(but­ton);
Nacpi tlačítko do panelu
frame.add(panel);//Nac­pi panel do framu

}

public static void main(String[] args) {
// TODO code application logic here
HelloWorldd world = new HelloWorldd();//Všec­hno to pusť
}

}
ja bych to nechal zmizet asi takhle :p

Nahoru Odpovědět
22.7.2014 19:12
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
lincerix
Člen
Avatar
lincerix:22.7.2014 19:19

wow, tak pres telefon uz nikda kod nevkladam. komentare to podelalo "//". :p

Nahoru Odpovědět
22.7.2014 19:19
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
mara
Člen
Avatar
Odpovídá na Atrament
mara:22.7.2014 20:39

teď si nejsu jistý, jak bych ho měl inicializovat :) :D

Nahoru Odpovědět
22.7.2014 20:39
Co na srdci, to na Facebooku
Avatar
mara
Člen
Avatar
mara:22.7.2014 21:04

Děkuji moc :) ale furt nevím, co dělám v tom svojim příkladě blbě :D

Nahoru Odpovědět
22.7.2014 21:04
Co na srdci, to na Facebooku
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na mara
Atrament:22.7.2014 21:17

frame = new JFrame() například :) Nechceš sem postnout celý ten kód rovnou, ať se na to můžem kouknout?

 
Nahoru Odpovědět
22.7.2014 21:17
Avatar
mara
Člen
Avatar
mara:22.7.2014 21:18

main

*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package screenshot;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;


public class ScreenShot extends JFrame {
    public boolean vis = true;
    ScreenShot(){

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Panel panel = new Panel();

        this.add(panel);
        this.setVisible(vis);
        this.pack();

    }



    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException{


        ScreenShot ss = new ScreenShot();







        // TODO code application logic here
    }



}
Nahoru Odpovědět
22.7.2014 21:18
Co na srdci, to na Facebooku
Avatar
mara
Člen
Avatar
mara:22.7.2014 21:20
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package screenshot;

import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.BoxLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Panel extends JPanel{

    TextField ta;


    String u;


    Panel(){


        FlowLayout f = new FlowLayout();

        this.setLayout(f);
        this.setPreferredSize(new Dimension(200, 200));
        A a = new A();
        JButton but = new JButton("Screenshot");
        but.setMinimumSize(new Dimension(50, 50));
        ta = new TextField("", 20);
        ta.setMaximumSize(new Dimension(50, 50));
        this.addMouseListener(a);
        this.add(ta);
        this.add(but);
        Act act = new Act();
        but.addActionListener(act);


    }



    public void shot() throws AWTException, IOException{
        Robot robot = new Robot();
        Rectangle area = new Rectangle(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
        BufferedImage buf = robot.createScreenCapture(area);
        String cesta = System.getenv("HOME") + File.separator + "Plocha" + File.separator + u + ".jpg";
        ImageIO.write(buf, "jpg", new File(System.getenv("HOME") + File.separator + "Plocha" + File.separator + u + ".jpg"));

    }
    public class Act implements ActionListener{
        ScreenShot ss;


        @Override
        public void actionPerformed(ActionEvent e) {

            try {
                ss.setVisible(false);
                u = ta.getText();
                shot();
                JOptionPane.showMessageDialog(null, "Hotovo");
            } catch (AWTException ex) {
                Logger.getLogger(Panel.class.getName()).log(Level.SEVERE, null, ex);
                System.out.println("chyba");
            } catch (IOException ex) {
                Logger.getLogger(Panel.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }
    public class A implements MouseListener{


        @Override
        public void mouseClicked(MouseEvent e) {
        }

        @Override
        public void mousePressed(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }

        @Override
        public void mouseEntered(MouseEvent e) {
        }

        @Override
        public void mouseExited(MouseEvent e) {
        }

    }



}
Nahoru Odpovědět
22.7.2014 21:20
Co na srdci, to na Facebooku
Avatar
mara
Člen
Avatar
mara:22.7.2014 21:22

znovu main.. měl jsem tam kraviny.. už jsem zkoušel všechno

package screenshot;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;


public class ScreenShot extends JFrame {   ;
    ScreenShot(){

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Panel panel = new Panel();

        this.add(panel);
        this.setVisible(true);
        this.pack();

    }



    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException{


        ScreenShot ss = new ScreenShot();







        // TODO code application logic here
    }



}
Nahoru Odpovědět
22.7.2014 21:22
Co na srdci, to na Facebooku
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na mara
Atrament:22.7.2014 23:16

Jak jsem čekal, voláš tam ss.setVisible() v té actionPerformed() v objektu 'a' ve třídě Act, aniž bys to ss předtím někde nějak vytvořil (inicializoval nebo získal předáním). Tu třídu Act vyhoď, je zbytečná, akci na tlačíko přidej tak jak ti to výše ukázal lincerix anonymní implementací ActionListeneru:

button.addActionListener( new ActionListener() {

  public void actionPerformed(ActionEvent ae) {
    ss.setVisible(false);
  }
});

přičemž to 'ss' musíš dostat do toho panelu nejlépe parametrem jeho konstruktoru, budeš mít konstruktor: Panel(ScreenShot ss) ten budeš volat v ScreenShot - Panel panel = new Panel(this) a v tom konstruktoru toho panelu pak budeš mít dostupnou tu instanci toho objektu ScreenShot ss takže budeš moct udělat ss.setVisible()...

Btw pojmenovávat proměnné jedním či dvěma písmenky je nepěkný zvyk, takové kryptické zdrojáky se pak blbě čtou vůbec se toho neboj a pojmenuj si proměnnou nějakým vystižným pojmenováním, IDE to doplňuje při psaní z velké části za tebe, tak proč toho nevyužít a později oceníš že se to líp čte. Například to tlačítko - 'but' vs třeba startActionButton, doScreenshotButton, takePictureButton ...

 
Nahoru Odpovědět
22.7.2014 23:16
Avatar
lincerix
Člen
Avatar
lincerix:23.7.2014 1:04

Ještě bych dodal jenom k tomu, co napsal tady zdatný kolega Atrament, aby ses vůbec nestyděl dělat komenty.
Mně tam sice komenty vypadly, protože se to celé drblo při kopírování z telefonu, ale jak nebudeš dělat komenty, tak je to katastrofa - zvykni si na to :-) (kód je i pak přehlednější pro lidi, co to čtou).

Nahoru Odpovědět
23.7.2014 1:04
Jsem otřesný programátor - začátečník... Ale nikdy mě nic nebavilo tak moc, jako čučet do Javovského kódu.
Avatar
mara
Člen
Avatar
mara:23.7.2014 8:40

Dobře všem moc děkuji :) příště už to bude i s komenty a výstižnějšíma názvama :)

Nahoru Odpovědět
23.7.2014 8:40
Co na srdci, to na Facebooku
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.