kochphilip Geschrieben 21. Dezember 2007 Geschrieben 21. Dezember 2007 Guten Tag, ich möchte eine Programm (Fenster.java) erstellen welches ein Fenster öffnet auf dem ein Button ist, wenn ich auf den Button klicke soll sich noch ein Fenster öffnen. Als weitere Funktion soll das Look-And-Feel umgestellt werden können, wenn ich das Look-And-Feel auf "Windows" stelle soll der Button der sich öffnet auch das Look-And-Feel bekommen. Aber es fängt schon an das ich beim versuch das Programm zu kompelieren, folgenden Fehler bekomme: java.lang.NoSuchMethodError: main Exception in thread "main" import javax.swing.*; import java.awt.event.*; import java.awt.*; import javax.swing.event.*; import java.util.Properties; import java.io.FileInputStream; import java.util.Iterator; public class Fenster extends JFrame implements ActionListener { private String plaf = "javax.swing.plaf.metal.MetalLookAndFeel"; private JButton btn = new JButton("Hilfe"); private static Fenster wnd = new Fenster(); public Fenster() { super("Test Fenster"); JMenuBar menubar = new JMenuBar(); menubar.add(createFileMenu()); setJMenuBar(menubar); Container contentPane = getContentPane(); contentPane.setLayout(new GridLayout(1,1)); JPanel zeile1 = new JPanel(); zeile1.setLayout(new GridLayout(1,2)); btn.addActionListener(this); zeile1.add(btn); zeile1.setBorder(BorderFactory.createEtchedBorder()); contentPane.add(zeile1); } private JMenu createFileMenu() { JMenu ret = new JMenu("Design"); ret.setMnemonic('D'); JMenuItem mi; // Metal mi = new JMenuItem("Metal",'l'); mi.addActionListener(this); ret.add(mi); // Motif mi = new JMenuItem("Motif",'f'); mi.addActionListener(this); ret.add(mi); // Windows mi = new JMenuItem("Windows",'W'); mi.addActionListener(this); ret.add(mi); return ret; } public void actionPerformed(ActionEvent event) { String cmd = event.getActionCommand(); try { //PLAF-Klasse auswählen if (cmd.equals("Metal")){ plaf = "javax.swing.plaf.metal.MetalLookAndFeel"; }else if (cmd.equals("Motif")){ plaf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel"; }else if (cmd.equals("Windows")) { plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; } //LAF umschalten UIManager.setLookAndFeel(plaf); SwingUtilities.updateComponentTreeUI(this); }catch(UnsupportedLookAndFeelException e) { System.err.println(e.toString()); }catch (ClassNotFoundException e) { System.err.println(e.toString()); }catch(InstantiationException e) { System.err.println(e.toString()); }catch(IllegalAccessException e) { System.err.println(e.toString()); } if(cmd == "Hilfe") { JOptionPane.showMessageDialog(wnd,"hier wird Ihnen geholfen","die Hilfe",1); } } public static void main(String[] args) { wnd.setResizable(false); wnd.setLocation(100,100); wnd.setSize(500 ,175); wnd.setVisible(true); } } Meine Fragen sind also wie folgt: 1. Wie bekomme ich den Fehler weg? 2. Wie bekomme ich hin, das sich das Fenster mit dem richtigen Look-And-Feel öffnet? Zitieren
Jaraz Geschrieben 21. Dezember 2007 Geschrieben 21. Dezember 2007 Die Datei an sich ist korrekt. Hast du die auch nach der letzten Änderung kompiliert? Zitieren
flashpixx Geschrieben 21. Dezember 2007 Geschrieben 21. Dezember 2007 Also das Programm läuft und macht auch alles das was es soll. Getestet unter OSX 10.4.11 mit: java version "1.5.0_13" Java 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-241) Java HotSpot Client VM (build 1.5.0_13-121, mixed mode, sharing) Ggf. prüfst Du mal die Java-Umgebung (CLASSPATH usw), evtl postest Du auch mal die Informationen. HTH Phil Zitieren
kochphilip Geschrieben 21. Dezember 2007 Autor Geschrieben 21. Dezember 2007 ja, wobe ich mittlerweile glaube das es am Compiler liegt, weil es in einem anderen funktioniert hat. Jetzt habe ich ausprobiert eine zweite Klasse zu schreiben die ein Fenster öffnet und für die Eingabe eines Arrays zuständig ist: import javax.swing.*; import java.awt.event.*; import java.awt.*; import javax.swing.event.*; import java.util.Properties; import java.io.FileInputStream; import java.util.Iterator; public class PKONV0002 extends JFrame implements ActionListener, CaretListener { static Properties properties = null; private static final String[] mandanten = { "D", "A", "CH", "GB", "F","NL" }; private static final String[] firmen = { "JKG","PIV" }; private static String hilfe; private static int mandant; private static int firma; private static String vdat; private static String plz; private static String agrp; private static String wpnr; private JComboBox comfnr = new JComboBox(firmen); private JComboBox comma = new JComboBox(mandanten); private JTextField tfwpnr = new JTextField(3); private JTextField tfplz = new JTextField(5); private JTextField tfvdat = new JTextField(10); private JTextField tfagrp = new JTextField(2); private JButton btnhilfe = new JButton("Hilfe"); private JButton btnwcodes = new JButton("WCodes"); private JButton btnvorschau = new JButton("Vorschau"); private JButton btnerstellen = new JButton("Erstellen"); private JProgressBar pb = new JProgressBar(); private static PKONV0002 wnd = new PKONV0002(); private static PKONV0003 wcodes = new PKONV0003(); private String plaf = "javax.swing.plaf.metal.MetalLookAndFeel"; public PKONV0002() { super("Automatisierte SQL-Datenkonvertierung"); JMenuBar menubar = new JMenuBar(); menubar.add(createFileMenu()); setJMenuBar(menubar); Container contentPane = getContentPane(); contentPane.setLayout(new GridLayout(5,1)); try { properties = new Properties(); properties.load(new FileInputStream("./PKONV0002.properties")); } catch(Exception Ex) { System.err.println("Zugriff auf Konfigurationsdatei nicht möglich!"); } hilfe = properties.getProperty("Hilfe"); // Zeile 1: JPanel zeile1 = new JPanel(); zeile1.setLayout(new GridLayout(1,4)); JLabel lblma = new JLabel( " Mandant:", SwingConstants.LEFT ); zeile1.add(lblma); comma.setEditable(false); comma.addActionListener(this); zeile1.add(comma); JLabel lblfnr = new JLabel( " Firmen-Nr:", SwingConstants.LEFT ); zeile1.add(lblfnr); comfnr.addActionListener(this); comma.setEditable(false); zeile1.add(comfnr); zeile1.setBorder(BorderFactory.createEtchedBorder()); contentPane.add(zeile1); // Zeile 2: JPanel zeile2 = new JPanel(); zeile2.setLayout(new GridLayout(1,4)); JLabel lblwpnr = new JLabel( " WPNR:", SwingConstants.LEFT ); zeile2.add(lblwpnr); tfwpnr.setToolTipText("Einschränkung der Werbeaktion"); tfwpnr.addCaretListener(this); zeile2.add(tfwpnr); JLabel lblplz = new JLabel( " PLZ:", SwingConstants.LEFT ); zeile2.add(lblplz); tfplz.setToolTipText("Einschränkung auf die Postleitzahl"); tfplz.addCaretListener(this); zeile2.add(tfplz); zeile2.setBorder(BorderFactory.createEtchedBorder()); contentPane.add(zeile2); // Zeile 3: JPanel zeile3 = new JPanel(); zeile3.setLayout(new GridLayout(1,4)); JLabel lblVdat = new JLabel( " Versanddatum:", SwingConstants.LEFT ); zeile3.add(lblVdat); tfvdat.setToolTipText("Eingabe des Versanddatums"); tfvdat.addCaretListener(this); zeile3.add(tfvdat); JLabel lblAGrp = new JLabel( " Ausgabegruppe:", SwingConstants.LEFT ); zeile3.add(lblAGrp); tfagrp.setToolTipText("Eingabe der Ausgabegruppe"); tfagrp.addCaretListener(this); zeile3.add(tfagrp); zeile3.setBorder(BorderFactory.createEtchedBorder()); getContentPane().add(zeile3); // Zeile 4 JPanel zeile4 = new JPanel(); zeile4.setLayout(new GridLayout(1,4)); btnhilfe.addActionListener(this); zeile4.add(btnhilfe); btnwcodes.addActionListener(this); zeile4.add(btnwcodes); btnvorschau.addActionListener(this); // zeile4.add(btnVorschau); btnerstellen.addActionListener(this); zeile4.add(btnerstellen); zeile4.setBorder(BorderFactory.createEtchedBorder()); getContentPane().add(zeile4); // Zeile 5 getContentPane().add(pb); pb.setStringPainted(true); pb.setString(""); // addWindowListener(new WindowClosingAdapter(true)); } private JMenu createFileMenu() { JMenu ret = new JMenu("Design"); ret.setMnemonic('D'); JMenuItem mi; // Metal mi = new JMenuItem("Metal",'l'); mi.addActionListener(this); ret.add(mi); // Motif mi = new JMenuItem("Motif",'f'); mi.addActionListener(this); ret.add(mi); // Windows mi = new JMenuItem("Windows",'W'); mi.addActionListener(this); ret.add(mi); /* // Mac mi = new JMenuItem("Mac",'M'); mi.addActionListener(this); ret.add(mi); */ return ret; } public void caretUpdate(CaretEvent event) { agrp = tfagrp.getText(); wpnr = tfwpnr.getText(); vdat = tfvdat.getText(); plz = tfplz.getText(); pb.setString(""); } public void actionPerformed(ActionEvent event) { pb.setString(""); mandant = comma.getSelectedIndex(); mandant++; firma = comfnr.getSelectedIndex(); firma++; this.tfplz.setEditable(true); if (mandant != 1) { comfnr.setSelectedIndex(1); firma = 1; tfplz.setEditable(false); } String cmd = event.getActionCommand(); System.out.println(cmd); try { //PLAF-Klasse auswählen if (cmd.equals("Metal") || cmd.equals("Motif") || cmd.equals("Windows") || cmd.equals("Mac")) { if (cmd.equals("Metal")) { plaf = "javax.swing.plaf.metal.MetalLookAndFeel"; }else if (cmd.equals("Motif")) { plaf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel"; }else if (cmd.equals("Windows")) { plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"; } else if (cmd.equals("Mac")) { plaf = "javax.swing.plaf.mac.MacLookAndFeel"; } pb.setString("Design geändert in "+cmd); //LAF umschalten UIManager.setLookAndFeel(plaf); SwingUtilities.updateComponentTreeUI(this); } if (cmd == "Vorschau" || cmd == "Erstellen") { int nok = 0; System.out.println("1"); String info = "Ihre Eingaben: \n"; info = info+"\n Mandant: "+mandant+" ("+comma.getSelectedItem()+")"; info = info+"\n Firma: "+firma+" ("+comfnr.getSelectedItem()+")"; info = info+"\n WPNR: "+wpnr; System.out.println("2"); if(wpnr.length() == 0) { info = info+" XXX"; nok = 1; } System.out.println("2a"); if(mandant==1) { info = info+"\n PLZ: "+plz; } System.out.println("3"); info = info+"\n Versanddatum: "+vdat; if(vdat.length() == 0) { info = info+" ***"; nok = 1; } System.out.println("4"); info = info+"\n Ausgabegruppe: "+agrp; if(agrp.length()== 0) { info = info+" ***"; nok = 1; } info = info+"\n \n Werbecodes:"; System.out.println("5"); Iterator itwcodes = wcodes.getWCodes(); Iterator itavar = wcodes.getAVar(); itwcodes.next(); itavar.next(); while(itwcodes.hasNext()) { info = info+"\n( "+(String)(itavar.next())+" ): "+(String)(itwcodes.next()); } System.out.println("6"); if (nok == 0) { nok = JOptionPane.showConfirmDialog(wnd, info, "Vorschau", 2); } else { info = info+"/n*** Falsche Eingabe"; JOptionPane.showMessageDialog(wnd,info,"Fehler...",1); } if (nok == 0 && cmd == "Erstellen") { pb.setString("Daten werden verarbeitet"); System.out.println("Erstellen der Textdatei"); pb.setString("Datei wurde erstellt"); } } if (cmd == "Hilfe") { JOptionPane.showMessageDialog(wnd,hilfe,"die Hilfe",1); } if (cmd == "WCodes") { wcodes.zeige(plaf); } }catch(UnsupportedLookAndFeelException e) { System.err.println(e.toString()); }catch (ClassNotFoundException e) { System.err.println(e.toString()); }catch(InstantiationException e) { System.err.println(e.toString()); }catch(IllegalAccessException e) { System.err.println(e.toString()); } } public static void main(String[] args) { WindowListener wl = new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } }; wnd.addWindowListener(wl); wnd.setResizable(false); wnd.setLocation(100,100); wnd.setSize(500 ,175); wnd.setVisible(true); } } das funktioniert gar nicht, bei beiden Compilern nicht (Eclise und JavaEditor) Zitieren
kochphilip Geschrieben 21. Dezember 2007 Autor Geschrieben 21. Dezember 2007 und die zweite Klasse import javax.swing.*; import java.awt.event.*; import java.awt.*; import javax.swing.event.*; import java.util.ArrayList; import java.util.Iterator; public class PKONV0003 extends JFrame implements ActionListener, CaretListener { private JTextField tfwcodes = new JTextField(25); private JTextField tfavar = new JTextField(5); private JTextField tfindakt = new JTextField(2); private JTextField tfindmax = new JTextField(2); private JButton btnvor = new JButton(">"); private JButton btnzurueck = new JButton("<"); private static int indmax = 1; private static int indakt = 1; private static String cmd = " "; private ArrayList<String> avar = new ArrayList<String>(); private ArrayList<String> wcodes = new ArrayList<String>(); private static PKONV0003 wnd = new PKONV0003(); public PKONV0003() { super("Eingabe der Werbecodes"); Container contentPane = getContentPane(); contentPane.setLayout(new GridLayout(3,1)); // Zeile 1: JPanel zeile1 = new JPanel(); zeile1.setLayout(new GridLayout(1,2)); JLabel lblavar = new JLabel( " Ausgabevariante:", SwingConstants.LEFT ); zeile1.add(lblavar); tfavar.addCaretListener(this); tfavar.setToolTipText("Eingabe der Ausgabevariante"); zeile1.add(tfavar); zeile1.setBorder(BorderFactory.createEtchedBorder()); contentPane.add(zeile1); // Zeile 2: JPanel zeile2 = new JPanel(); zeile2.setLayout(new GridLayout(1,2)); JLabel lblwcodes = new JLabel( " Werbecodes:", SwingConstants.LEFT ); zeile2.add(lblwcodes); tfwcodes.addCaretListener(this); tfwcodes.setToolTipText("Eingabe der Werbecodes"); zeile2.add(tfwcodes); zeile2.setBorder(BorderFactory.createEtchedBorder()); contentPane.add(zeile2); // Zeile 3: JPanel zeile3 = new JPanel(); zeile3.setLayout(new FlowLayout()); btnzurueck.setToolTipText("Zurück"); btnzurueck.addActionListener(this); zeile3.add(btnzurueck); tfindakt.setToolTipText("Springe zu..."); tfindakt.addActionListener(this); tfindakt.setText("1"); zeile3.add(tfindakt); JLabel lblflash = new JLabel( " /", SwingConstants.LEFT ); zeile3.add(lblflash); tfindmax.setEditable(false); tfindmax.setText("1"); zeile3.add(tfindmax); btnvor.setToolTipText("Vor"); btnvor.addActionListener(this); zeile3.add(btnvor); zeile3.setBorder(BorderFactory.createEtchedBorder()); getContentPane().add(zeile3); avar.add(" "); wcodes.add(" "); avar.add(""); wcodes.add(""); } public void caretUpdate(CaretEvent event) { if (cmd == " ") { avar.set(indakt,tfavar.getText()); wcodes.set(indakt,tfwcodes.getText()); } } public void actionPerformed(ActionEvent event) { cmd = event.getActionCommand(); if (wcodes.get(indakt).length() == 0) { if (cmd != "<" || indakt != 1) { System.out.println("Index: "+indakt); avar.remove(indakt); wcodes.remove(indakt); indmax--; } if (cmd == ">") {indakt--;} } if (cmd == ">") { indakt++; if(indakt > indmax) { avar.add(""); wcodes.add(""); indmax++; } } if (cmd == "<") { if(indakt > 1) { indakt--; } } tfavar.setText(avar.get(indakt)); tfwcodes.setText(wcodes.get(indakt)); tfindmax.setText(String.valueOf(indmax)); tfindakt.setText(String.valueOf(indakt)); cmd = " "; } public void zeige(String plaf) { wnd.setResizable(false); wnd.setLocation(400,250); wnd.setSize(350 ,115); wnd.setVisible(true); } public Iterator getWCodes() { return wcodes.iterator(); } public Iterator getAVar() { return avar.iterator(); } public static void main(String[] args) { } } Zitieren
flashpixx Geschrieben 21. Dezember 2007 Geschrieben 21. Dezember 2007 Kompiliere bitte mal direkt aus der Konsole und versuche aus der Konsole das Programm zu starten Phil Zitieren
kochphilip Geschrieben 21. Dezember 2007 Autor Geschrieben 21. Dezember 2007 wie Kompiliere ich das in der Console? Zitieren
kingofbrain Geschrieben 21. Dezember 2007 Geschrieben 21. Dezember 2007 Servus, ich habe mir jetzt die Klassen nicht angesehen, aber Deine Fehlermeldung deutet auf einen Fehler zur Laufzeit hin, nicht beim Kompileren. Der NoSuchMethodError sollte zur Laufzeit geworfen werden, wenn eine Methode, die angesprochen wird (z.B. über Reflection) nicht gefunden werden kann. Kannst Du das bitte präzisieren? Tritt der Fehler zur Compile- oder Laufzeit auf? Peter Zitieren
flashpixx Geschrieben 21. Dezember 2007 Geschrieben 21. Dezember 2007 mit javac kompilierst Du. Aber bitte suche danach, dafür gibt es jede Menge Anfängertutorials Phil Zitieren
kochphilip Geschrieben 21. Dezember 2007 Autor Geschrieben 21. Dezember 2007 PKONV0003.java:24: <identifier> expected private ArrayList<String> avar = new ArrayList<String>(); das habe ich bekommen als ich mit der Console kompelieren wollte... und wenn ich das Programm mit Eclipse starte kommt ein Fehler während der Laufzeit nach dieser Zeile (in PKONV0002 in der Methode ActionactionPerformed()): if(wpnr.length() == 0) at PKONV0002.actionPerformed(PKONV0002.java:251) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) der bekommt die Methode length() nicht hin, wobei ich das bei der anderen Klasse (PKONV0003) hinbekommen habe (das bezieht sich jetzt alles auf die letzten beiden Klassen die ich gepostet habe, die erste hat funktioniert (nur halt nicht unter Eclipse)) Zitieren
flashpixx Geschrieben 21. Dezember 2007 Geschrieben 21. Dezember 2007 Deine beiden Klassen lassen sich kompilieren _und_ ausführen. Es treten weder Kompilierungs- noch Laufzeitfehler auf. Bitte konfiguriere zuerst einmal Deine Umgebung richtig und vollständig, so dass Du zuerst einmal unter der Konsole fehlerfrei arbeiten kannst, danach prüft Du die Konfiguration in Deinen IDE's. Ich habe es sowohl unter der Konsole, als auch Eclipse, als auch XCode laufen lassen. Phil Zitieren
kochphilip Geschrieben 21. Dezember 2007 Autor Geschrieben 21. Dezember 2007 also bei mir kommt der Fehler wenn ich auf den Button "Erstellen" klicke, werde ich wohl jetzt mal gucken was ich wie wo ändern kann und dann mal weiterschauen, danke für die Hilfe... Zitieren
flashpixx Geschrieben 21. Dezember 2007 Geschrieben 21. Dezember 2007 Hallo, ich hatte nicht auf "Erstellen" geklickt, aber da kommt eine Null-Pointer-Exception, da wird also irgendein Objekt NULL sein. Dein Code ist unübersichtlich, vor allem ein Tipp trenne Design und Eventlistener, es macht es wesentlich übersichtlicher und man kann Fehler schneller finden. Dokumentiere den Code, vor allem verstehe ich deine Inkrements teilweise nicht bzw. ich möchte Deinen Code auch nicht komplett durchlesen, um Deine Gedanken nachvollziehen zu können. Außerdem ein guter Ratschlag, wenn eine Methode länger als eine Bildschirmseite ist, dann sollte man sich die Gedanken machen, ob man es nicht besser in mehrere Methoden aufteilen kann HTH Phil Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.