[Java] NUll Object trotz Initialisierung

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Smokers, 26. Oktober 2011 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 26. Oktober 2011
    NUll Object trotz Initialisierung

    // neue Frage unten !!







    Hallo

    also ich hab folgendes Problem zur Zeit:
    Ich habe mittels WindowBuilder in Eclipse eine Applikation erstellt, die ein wenig an meiner Dreambox rumspielt.

    Dazu soll am Anfang falls unbekannt die IP der Dreambox abgefragt werden.
    Ich habe dazu auch mit dem WindowBuilder Plugin einen JDialog erzeugt.

    Hier die Programmteile:

    dmipDialog: (ich weis das die public static void main(String[] args) nicht notwendig ist, aber an der liegts nicht )
    Code:
    package main;
    
    import java.awt.EventQueue;
    
    public class dmipDialog extends JDialog {
    private static final long serialVersionUID = 1L;
     /**
     * Launch the application.
     */
     public static void main(String[] args) {
     EventQueue.invokeLater(new Runnable() {
     public void run() {
     try {
     dmipDialog dialog = new dmipDialog();
     dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
     dialog.setVisible(true);
     } catch (Exception e) {
     e.printStackTrace();
     }
     }
     });
     }
    
     /**
     * Create the dialog.
     */
     public dmipDialog() {
     setResizable(false);
     setAlwaysOnTop(true);
     setBounds(100, 100, 450, 300);
    
     }
    
    }
    
    und dann auf einem Button meines JFrames :
    Code:
    mntmTest.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     dmipDialog test = new dmipDialog();
     test.setVisible(true);
     }
     });
    Ich habe auch schon versucht dem JDialog den praent Frame mitzugeben unzwar so :

    Code:
    final dmipDialog dmdiag = new dmipDialog(this);
    und
    Code:
    package main;
    
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    
    public class dmipDialog extends JDialog {
     /**
     * 
     */
     private static final long serialVersionUID = 1L;
    
     /**
     * Create the dialog.
     */
     public dmipDialog(JFrame pframe) {
     super(pframe);
     setResizable(false);
     setAlwaysOnTop(true);
     setBounds(100, 100, 450, 300);
    
     }
    
    }
    

    Abber dennoch kann ich das RootJFrame ansprechen und dinge selektieren und ganz normal mit arbeiten.
    Woran kann das liegen?
     
  2. 26. Oktober 2011
    AW: setAlwaysOnTop bringt nichts

    Wenn ich das richtig verstanden habe, möchtest du, dass man in dem Programm nichts tun kann, solange der Dialog offen ist, außer eben diesen Dialog zu bedienen?

    Dann bringt dir Visibility (setAlwaysOnTop) nichts, der Begriff den du suchst ist Modality. Hab schon lange nix mehr mit Java/Swing gemacht, aber habs einfach mal bei google reingehauen und bin auf folgendes Ergebnis gekommen, sieht jedenfalls gut aus:
    http://download.oracle.com/javase/tutorial/uiswing/misc/modality.html

    Vllt hilft dir das weiter.
     
  3. 26. Oktober 2011
    AW: setAlwaysOnTop bringt nichts

    Ahhh danke,

    das wars schon, ich hab einfach in den konstruktor das geändert : super(pframe,false) und schon war der gewünschte effekt da.

    Mir kam es nur immer so vor, als das wenn ich nen neuen JDialog erzeugt habe per new JDialog(); das der automatisch immer im vordergrund und immer im focus war.

    und erst als ich den WindowBuidler hier genutzt habe, war das irgendwie anders ( so kams mir zumidnest vor)

    aber okay... ^^ geht. danke =)



    Neue Frage :


    Ich hab noch das problem gerade das ich den Status eines JCheckBoxMenuItem abfragen möchte ( mittels isSelected() ).

    Code:
    private void publish() {
     System.out.println(chckbxmntmCopyToClipboard);
     ....
    }
    
    ergibt immer "null".

    Deklariert werden meine Objekte :
    Code:
    private JCheckBoxMenuItem chckbxmntmCopyToClipboard;
    jedoch werden sie im Konstruktor initialisiert mit :
    Code:
    JCheckBoxMenuItem chckbxmntmCopyToClipboard = new JCheckBoxMenuItem(
     locales.getString(
     "DMPublisher.chckbxmntmCopyToClipboard.text", "Copy to Clipboard")); //$NON-NLS-1$ //$NON-NLS-2$
     mnNewMenu.add(chckbxmntmCopyToClipboard);
    Was ist daran falsch?

    Okay ich weis wenn ich sie gleich oben initialisiere also in der Variablen Deklaration außerhalb einer Methode, dann gehts.
    Aber wo liegt der Denkfehler?
     
  4. 27. Oktober 2011
    AW: NUll Object trotz Initialisierung

    Hallo!

    Ein Fehler, der bei mir mal auftrat, war, dass ich im Konstruktor setVisible(true) benutzt habe. Diese Funktion blockiert, d.h. der Konstruktor beendet sich nicht, und das Objekt bleibt dann null. Es ist zwar keine ganz schluessige Erklaerung, warum die Checkbox null ist, aber vielleicht ein guter Hinweis. Du solltest also mal ueberpruefen wo du in den "Mainloop" einsteigst. Zur Loesung des Problems ist jedenfalls mehr Sourcecode notwendig (evtl in einem Spoiler posten).

    EDIT: Eventuell mal den Debugger anschmeissen und schrittweise durchs Programm gehen. Und es ist eine schlechte Idee die Klasse mit der main-Methode von anderen Klassen erben zu lassen... Ich schlage eine saubere Trennung vor, dann loesen sich viele (potentielle) Probleme von meistens sogar selbst.

    Mfg,

    Kolazomai
     
  5. 27. Oktober 2011
    AW: NUll Object trotz Initialisierung

    Hier mal fast alles vom Code,....
    ich nutze zar das setVisible() aber nicht im Konstruktor,.. kanns mir halt nicht erklären bisher.
    Muss erstmal den Debugger von Eclipse neu basteln, der funzt iwie glaub ich gerade nur ,... minderwertig ^^°

    Spoiler
    Code:
    package main;
    
    import java.awt.EventQueue;
    import java.awt.Toolkit;
    import java.awt.datatransfer.Clipboard;
    import java.awt.datatransfer.StringSelection;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.swing.DefaultListModel;
    import javax.swing.GroupLayout;
    import javax.swing.GroupLayout.Alignment;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JCheckBoxMenuItem;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JProgressBar;
    import javax.swing.JScrollPane;
    import javax.swing.JSeparator;
    import javax.swing.LayoutStyle.ComponentPlacement;
    import javax.swing.SwingConstants;
    import javax.swing.Timer;
    import javax.swing.border.EmptyBorder;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    
    public class DMPublisher extends JFrame {
    
     /**
     * 
     */
     private static final long serialVersionUID = 1L;
     private JPanel contentPane;
     final JList<Channel> list;
     DefaultListModel<Channel> model;
     private JProgressBar progressBar;
     private JLabel lblNewLabel;
     final AboutDialog adiag = new AboutDialog(this);
     final ConfigDialog cdiag = new ConfigDialog(this);
     final dmipDialog dmdiag = new dmipDialog(this);
     private ArrayList<Channel> channel_list = new ArrayList<Channel>();
     private Timer refresh_timer;
     private JCheckBoxMenuItem chckbxmntmFtpPublizieren;
     private JCheckBoxMenuItem chckbxmntmDateiPublizieren;
     private JCheckBoxMenuItem chckbxmntmCopyToClipboard;
    
     private Config cfg = Config.getInstance();
    
     /**
     * Launch the application.
     *[B] Wird automatisch generiert, könnte ich auch in eine extra klasse auslagern aber was bringt das?![/B]
     */
     public static void main(String[] args) {
     EventQueue.invokeLater(new Runnable() {
     public void run() {
     try {
     DMPublisher frame = new DMPublisher();
     [B]frame.setVisible(true); //--> vielleicht deswegen?[/B]
     } catch (Exception e) {
     e.printStackTrace();
     }
     }
     });
     }
    
     /**
     * Create the frame.
     */
     public DMPublisher() {
     cfg.readIniFile();
     setIconImage(Toolkit.getDefaultToolkit().getImage(
     DMPublisher.class.getResource("/img/favicon1.png")));
     setTitle("DMPublisher");
     setResizable(false);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setBounds(100, 100, 420, 370);
     model = new DefaultListModel<Channel>();
     progressBar = new JProgressBar();
    
     refresh_timer = new Timer(cfg.getUpdate_interval() * 1000,
     new RefreshListener(this));
     JMenuBar menuBar = new JMenuBar();
     
    
     JMenu mnDatei = new JMenu(locales.getString(
     "DMPublisher.mnDatei.text", "Datei")); //$NON-NLS-1$ //$NON-NLS-2$
     menuBar.add(mnDatei);
    
     JMenuItem mntmRefresh = new JMenuItem(locales.getString(
     "DMPublisher.mntmRefresh.text", "Aktualisieren")); //$NON-NLS-1$ //$NON-NLS-2$
     mntmRefresh.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     refreshList();
     }
     });
     mntmRefresh.setIcon(new ImageIcon(DMPublisher.class
     .getResource("/img/refresh.png")));
     mnDatei.add(mntmRefresh);
    
     JSeparator separator = new JSeparator();
     mnDatei.add(separator);
    
     JMenuItem mntmBeenden = new JMenuItem(locales.getString(
     "DMPublisher.mntmBeenden.text", "Beenden")); //$NON-NLS-1$ //$NON-NLS-2$
     mntmBeenden.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     System.exit(0);
     }
     });
     mntmBeenden.setIcon(new ImageIcon(DMPublisher.class
     .getResource("/img/close.png")));
     mnDatei.add(mntmBeenden);
    
     JMenu mnDbox = new JMenu(locales.getString(
     "DMPublisher.mnDbox.text", "DBox")); //$NON-NLS-1$ //$NON-NLS-2$
     menuBar.add(mnDbox);
    
     JMenuItem mntmKillStreamServic = new JMenuItem(locales.getString(
     "DMPublisher.mntmKillStreamServic.text", "Kill Stream Service")); //$NON-NLS-1$ //$NON-NLS-2$
     mnDbox.add(mntmKillStreamServic);
    
     JMenu mnNewMenu = new JMenu(locales.getString(
     "DMPublisher.mnNewMenu.text", "Einstellungen")); //$NON-NLS-1$ //$NON-NLS-2$
     menuBar.add(mnNewMenu);
    
     JMenuItem mntmAllgemein = new JMenuItem(locales.getString(
     "DMPublisher.mntmAllgemein.text", "Publikations-Einstellungen")); //$NON-NLS-1$ //$NON-NLS-2$
     mntmAllgemein.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     cdiag.setVisible(true);
     }
     });
     mntmAllgemein.setIcon(new ImageIcon(DMPublisher.class
     .getResource("/img/common.png")));
     mnNewMenu.add(mntmAllgemein);
    
     [B]chckbxmntmFtpPublizieren = new JCheckBoxMenuItem(locales.getString(
     "DMPublisher.chckbxmntmFtpPublizieren.text", "FTP Publizieren")); //$NON-NLS-1$ //$NON-NLS-2$
     mnNewMenu.add(chckbxmntmFtpPublizieren);
    
     chckbxmntmDateiPublizieren = new JCheckBoxMenuItem(
     locales.getString(
     "DMPublisher.chckbxmntmDateiPublizieren.text", "Datei Publizieren")); //$NON-NLS-1$ //$NON-NLS-2$
     mnNewMenu.add(chckbxmntmDateiPublizieren);[/B]
    
     [B] JCheckBoxMenuItem chckbxmntmCopyToClipboard = new JCheckBoxMenuItem(
     locales.getString(
     "DMPublisher.chckbxmntmCopyToClipboard.text", "Copy to Clipboard")); //$NON-NLS-1$ //$NON-NLS-2$
     mnNewMenu.add(chckbxmntmCopyToClipboard);[/B]
    
     JMenu mnNewMenu_1 = new JMenu(locales.getString(
     "DMPublisher.mnNewMenu_1.text", "Hilfe")); //$NON-NLS-1$ //$NON-NLS-2$
     menuBar.add(mnNewMenu_1);
    
     JMenuItem mntmber = new JMenuItem(locales.getString(
     "DMPublisher.mntmber.text", "\u00DCber")); //$NON-NLS-1$ //$NON-NLS-2$
    
     mntmber.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     adiag.setVisible(true);
     }
     });
     mntmber.setIcon(new ImageIcon(DMPublisher.class
     .getResource("/img/help.png")));
     mnNewMenu_1.add(mntmber);
     contentPane = new JPanel();
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
     setContentPane(contentPane);
    
     JButton btnAlle = new JButton(locales.getString(
     "DMPublisher.btnAlle.text", "Alle")); //$NON-NLS-1$ //$NON-NLS-2$
     btnAlle.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     list.setSelectionInterval(0, list.getModel().getSize() - 1);
     }
     });
    
     JButton btnKeine = new JButton(locales.getString(
     "DMPublisher.btnKeine.text", "Keine")); //$NON-NLS-1$ //$NON-NLS-2$
     btnKeine.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     list.clearSelection();
     }
     });
    
     JButton btnAktuellerSender = new JButton(locales.getString(
     "DMPublisher.btnAktuellerSender.text", "Aktueller Sender"));
    
     JButton btnPublizieren = new JButton(locales.getString(
     "DMPublisher.btnPublizieren.text", "Publizieren")); //$NON-NLS-1$ //$NON-NLS-2$
     btnPublizieren.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     publish();
     }
     });
    
     JSeparator separator_1 = new JSeparator();
    
     lblNewLabel = new JLabel(locales.getString(
     "DMPublisher.lblNewLabel.text", "")); //$NON-NLS-1$ //$NON-NLS-2$
     lblNewLabel.setHorizontalAlignment(SwingConstants.LEFT);
     setJMenuBar(menuBar);
     JScrollPane scrollPane = new JScrollPane();
     GroupLayout gl_contentPane = new GroupLayout(contentPane);
     gl_contentPane
     .setHorizontalGroup(gl_contentPane
     .createParallelGroup(Alignment.TRAILING)
     .addGroup(
     gl_contentPane
     .createSequentialGroup()
     .addGroup(
     gl_contentPane
     .createParallelGroup(
     Alignment.LEADING)
     .addGroup(
     gl_contentPane
     .createSequentialGroup()
     .addContainerGap()
     .addGroup(
     gl_contentPane
     .createParallelGroup(
     Alignment.TRAILING)
     .addComponent(
     separator_1,
     GroupLayout.DEFAULT_SIZE,
     380,
     Short.MAX_VALUE)
     .addComponent(
     btnPublizieren)
     .addGroup(
     gl_contentPane
     .createSequentialGroup()
     .addComponent(
     btnAlle)
     .addPreferredGap(
     ComponentPlacement.RELATED)
     .addComponent(
     btnKeine)
     .addPreferredGap(
     ComponentPlacement.RELATED,
     140,
     Short.MAX_VALUE)
     .addComponent(
     btnAktuellerSender))
     .addGroup(
     gl_contentPane
     .createSequentialGroup()
     .addComponent(
     lblNewLabel)
     .addPreferredGap(
     ComponentPlacement.RELATED,
     234,
     Short.MAX_VALUE)
     .addComponent(
     progressBar,
     GroupLayout.PREFERRED_SIZE,
     GroupLayout.DEFAULT_SIZE,
     GroupLayout.PREFERRED_SIZE))))
     .addComponent(
     scrollPane,
     GroupLayout.DEFAULT_SIZE,
     392,
     Short.MAX_VALUE))
     .addContainerGap()));
     gl_contentPane
     .setVerticalGroup(gl_contentPane
     .createParallelGroup(Alignment.LEADING)
     .addGroup(
     gl_contentPane
     .createSequentialGroup()
     .addComponent(scrollPane,
     GroupLayout.PREFERRED_SIZE,
     195, GroupLayout.PREFERRED_SIZE)
     .addPreferredGap(
     ComponentPlacement.UNRELATED)
     .addGroup(
     gl_contentPane
     .createParallelGroup(
     Alignment.BASELINE)
     .addComponent(btnAlle)
     .addComponent(btnKeine)
     .addComponent(
     btnAktuellerSender))
     .addGap(18)
     .addComponent(btnPublizieren)
     .addPreferredGap(
     ComponentPlacement.UNRELATED)
     .addComponent(separator_1,
     GroupLayout.PREFERRED_SIZE,
     GroupLayout.DEFAULT_SIZE,
     GroupLayout.PREFERRED_SIZE)
     .addPreferredGap(
     ComponentPlacement.RELATED,
     GroupLayout.DEFAULT_SIZE,
     Short.MAX_VALUE)
     .addGroup(
     gl_contentPane
     .createParallelGroup(
     Alignment.LEADING)
     .addComponent(
     progressBar,
     GroupLayout.PREFERRED_SIZE,
     GroupLayout.DEFAULT_SIZE,
     GroupLayout.PREFERRED_SIZE)
     .addComponent(
     lblNewLabel))
     .addContainerGap()));
     list = new JList<Channel>();
     scrollPane.setViewportView(list);
    
     // setup model for jlist
    
     list.setModel(model);
     contentPane.setLayout(gl_contentPane);
     refreshList();
     refresh_timer.start();
     }
    
     protected void refreshList() {
    
     }
    
     public void setProgressBar(String a, String b) {
    
     }
    
     private void publish() {
     [B]System.out.println(chckbxmntmCopyToClipboard);
     //--> null[/B]
     }
    
    }
    
     
  6. 27. Oktober 2011
    AW: NUll Object trotz Initialisierung

    du deklarierst chckbxmntmCopyToClipboard im constructor als lokale variable
     
  7. 27. Oktober 2011
    AW: NUll Object trotz Initialisierung

    ey ..... -.-

    Peinlich.
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.