14. november 2004 - 14:24
Der er
39 kommentarer og 1 løsning
hvordan åbner man et frame
Jeg er begynder til java, og har et problem med et program... det er en frame, men jeg ved ikke hvordan jeg skal åbne den... jeg har kompilet den (eller hva det nu hedder), men jen ligger jo bare som en binær tekstfil...
Annonceindlæg fra IBM
14. november 2004 - 14:35
#1
du har kompilet den til en .class fil som så skal køres med: java classpath . DinFil.class fra en kommandopromt.
14. november 2004 - 14:39
#2
ups java -classpath . DinFil.class classpath er ikke altid nødvendig, men en god vane at have med.
14. november 2004 - 14:43
#3
hmm den returnere det her: Exception in thread "main" java.lang.NoClassDefFoundError: VindueInput/class
14. november 2004 - 14:46
#4
arrg, slå mig.. den er uden .class til sidst.
14. november 2004 - 14:49
#5
nu returnere den: Exception in thread "main" java.lang.NoClassDefFoundError: main det tyder på at den vil ha en main() funktion
14. november 2004 - 14:50
#6
men i lærerbogen står der ikke noget om en main funktion
14. november 2004 - 14:50
#7
ja, det vil den nok gerne. typisk er det nok at lave en lille main, evt. uden det store kode. men post evt. koden.
14. november 2004 - 14:52
#8
import java.awt.*; import java.awt.event.*; public class VindueInput extends Frame { Label hvad = new Label(); TextField input = new TextField(); Button knap = new Button(); TextArea tekst = new TextArea(); public void paint(Graphics g) { g.setColor(Color.blue); String navn = input.getText(); g.drawString("Hej " + navn, 10, 10); } public VindueInput() { try { JbInit(); } catch(Exception e) { e.printStackTrace(); } } private void JbInit() throws Exception { hvad.setText("Hvad er dit navn"); hvad.setBounds(new Rectangle(10, 30, 150, 15)); input.setText("?"); input.setBounds(new Rectangle(170, 30, 100, 15)); tekst.setText("Glæd dig!"); tekst.setBounds(new Rectangle(10, 50, 150, 50)); knap.setLabel("Opdater"); knap.setBounds(new Rectangle(170, 50, 100, 15)); knap.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { knapOpdater(e); } }); this.setLayout(null); this.add(hvad, null); this.add(input, null); this.add(knap, null); this.add(tekst, null); } void knapOpdater(ActionEvent e) { String navn = input.getText(); tekst.setText("Halløj der " + navn); repaint(); } }
14. november 2004 - 15:06
#9
Er det en java-console-app. eller er det en applet du forsøger at lave ? Applets skal køres via. en browser , og html-koden til dette er: <applet code="VindueInput.class" width="400" height="400">
14. november 2004 - 15:09
#10
Det er ikke en applet men måske mangler jeg en konsol til at kører den i
14. november 2004 - 15:11
#11
altså den kode der er vel bare en frame? lav en ny java fil.. denne public class Main { public static void main(String[] args) { VindueInput start = new VindueInput(); JbInit(); } } og kør den..
14. november 2004 - 15:11
#12
public class Main { public static void main(String[] args) { VindueInput start = new VindueInput(); start.JbInit(); } } glemte lige noget
14. november 2004 - 15:16
#13
hvis der er problemer med at finde hinanden så skal de ligge i samme package.. ....du skal i hvertfald bruge en main som jeg ser det.. og den skal oprette dette objekt og kalde det
14. november 2004 - 15:17
#14
ja, jeg trænger til søvn.. til console app, skal man huske at have: public static void main(String[] args) med i koden..
14. november 2004 - 15:18
#15
jeg kan nu ikke helt få den til at virke, men det lærer jeg nok senere
14. november 2004 - 15:18
#16
morteneart - hehe må indrømme jeg blev usikker på hvad hun ville fordi du snakkede om applets: ) glad for vi er enige nu hehe :))!
14. november 2004 - 15:20
#17
jannek_ek. du skal bare oprette en ny klasse inde i samme projekt.. så skal du bare smide dette ind i din nye klasse public static void main(String[] args) { VindueInput start = new VindueInput(); start.JbInit(); }
14. november 2004 - 15:21
#18
ehh hvordan ser koden til det ud??
14. november 2004 - 15:22
#19
prøv dette istedet hvis du ikke er helt med endnu import java.awt.*; import java.awt.event.*; public class VindueInput extends Frame { Label hvad = new Label(); TextField input = new TextField(); Button knap = new Button(); TextArea tekst = new TextArea(); public void paint(Graphics g) { g.setColor(Color.blue); String navn = input.getText(); g.drawString("Hej " + navn, 10, 10); } public VindueInput() { try { JbInit(); } catch(Exception e) { e.printStackTrace(); } } private void JbInit() throws Exception { hvad.setText("Hvad er dit navn"); hvad.setBounds(new Rectangle(10, 30, 150, 15)); input.setText("?"); input.setBounds(new Rectangle(170, 30, 100, 15)); tekst.setText("Glæd dig!"); tekst.setBounds(new Rectangle(10, 50, 150, 50)); knap.setLabel("Opdater"); knap.setBounds(new Rectangle(170, 50, 100, 15)); knap.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { knapOpdater(e); } }); this.setLayout(null); this.add(hvad, null); this.add(input, null); this.add(knap, null); this.add(tekst, null); } void knapOpdater(ActionEvent e) { String navn = input.getText(); tekst.setText("Halløj der " + navn); repaint(); } public static void main(String[] args) { VindueInput start = new VindueInput(); start.JbInit(); } } ved ikke om det også virker, men prøv
14. november 2004 - 15:23
#20
det andet skulle se sådan ud.. lav en ny java fil... navnet på filen skal være "Main.java" i dette tilfælde! hvis der bliver generet kode for dig så erstat med dette public class Main { public static void main(String[] args) { VindueInput start = new VindueInput(); JbInit(); } }
14. november 2004 - 15:23
#21
DOH! dette public class Main { public static void main(String[] args) { VindueInput start = new VindueInput(); start.JbInit(); } }
14. november 2004 - 15:28
#22
hvis det ikke virker så virker denne kode helt sikkert! lav en java fil som hedder "Main" og skriv kopir følgende ind i den package mypackage; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.UIManager; import java.awt.Dimension; import java.awt.Toolkit; public class Main { public Main() { Frame frame = new VindueInput(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setVisible(true); } /** * * @param args */ public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { e.printStackTrace(); } new Main(); } }
14. november 2004 - 15:29
#23
jeg trækker mig.. (trænger til søvn) Men jannek_ek du skulle måske kigge på swing komponenterne istedet, det er en god måde at starte på synes jeg.. (ja, det er så applets til en browser).. lidt mere moderne og nemmere end awt
14. november 2004 - 15:29
#24
det virker stadig ikke
14. november 2004 - 15:29
#25
jeg prøver noget andet
14. november 2004 - 15:31
#26
package mypackage; import javax.swing.JFrame; import java.awt.Dimension; import java.awt.*; import java.awt.event.*; public class VindueInput extends Frame { Label hvad = new Label(); TextField input = new TextField(); Button knap = new Button(); TextArea tekst = new TextArea(); public void paint(Graphics g) { g.setColor(Color.blue); String navn = input.getText(); g.drawString("Hej " + navn, 10, 10); } public VindueInput() { try { JbInit(); } catch(Exception e) { e.printStackTrace(); } } private void JbInit() throws Exception { this.setSize(new Dimension(400, 300)); hvad.setText("Hvad er dit navn"); hvad.setBounds(new Rectangle(10, 30, 150, 15)); input.setText("?"); input.setBounds(new Rectangle(170, 30, 100, 15)); tekst.setText("Glæd dig!"); tekst.setBounds(new Rectangle(10, 50, 150, 50)); knap.setLabel("Opdater"); knap.setBounds(new Rectangle(170, 50, 100, 15)); knap.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { knapOpdater(e); } }); this.setLayout(null); this.add(hvad, null); this.add(input, null); this.add(knap, null); this.add(tekst, null); } void knapOpdater(ActionEvent e) { String navn = input.getText(); tekst.setText("Halløj der " + navn); repaint(); } }
14. november 2004 - 15:32
#27
har lige rettet din kode.. du manglede at sætte størrelsen på din frame også this.setSize(new Dimension(400, 300)); bare kopir begge mine koder ind.. og kør main.java så virker det Svar
14. november 2004 - 15:33
#28
Kommentar: kalp 14/11-2004 15:28:01 Kommentar: kalp 14/11-2004 15:31:08 de to koder og så virker dit vindue.. lover det
14. november 2004 - 15:35
#29
Kommentar: jannek_ek 14/11-2004 14:49:09 yep.. og uden den så vil din kode ALDRIG virke... medmindre du vil lave en applets og det er IKKE tilfældet: )
14. november 2004 - 15:38
#30
Kommentar: kalp 14/11-2004 15:28:01 der er en fejl i den den siger at den ikke kender VindueInput
14. november 2004 - 15:39
#31
det fordi VindueInput skal ligge i samme folde som Main .. de skal lægge sammen selvfølgelig... eller i samme packagde
14. november 2004 - 15:40
#32
de ligger i den samme mappe
14. november 2004 - 15:44
#33
så til din første kode... ændre den til dette package mypackage; import javax.swing.JFrame; import java.awt.Dimension; import java.awt.*; import java.awt.event.*; import javax.swing.UIManager; public class VindueInput extends Frame { Label hvad = new Label(); TextField input = new TextField(); Button knap = new Button(); TextArea tekst = new TextArea(); public void paint(Graphics g) { g.setColor(Color.blue); String navn = input.getText(); g.drawString("Hej " + navn, 10, 10); } public VindueInput() { try { JbInit(); this.setSize(new Dimension(400, 300)); } catch(Exception e) { e.printStackTrace(); } } private void JbInit() throws Exception { this.setSize(new Dimension(400, 300)); hvad.setText("Hvad er dit navn"); hvad.setBounds(new Rectangle(10, 30, 150, 15)); input.setText("?"); input.setBounds(new Rectangle(170, 30, 100, 15)); tekst.setText("Glæd dig!"); tekst.setBounds(new Rectangle(10, 50, 150, 50)); knap.setLabel("Opdater"); knap.setBounds(new Rectangle(170, 50, 100, 15)); knap.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { knapOpdater(e); } }); this.setLayout(null); this.add(hvad, null); this.add(input, null); this.add(knap, null); this.add(tekst, null); } void knapOpdater(ActionEvent e) { String navn = input.getText(); tekst.setText("Halløj der " + navn); repaint(); } public void Main() { Frame frame = new VindueInput(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setVisible(true); } /** * * @param args */ public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { e.printStackTrace(); } new Main(); } }
14. november 2004 - 15:46
#34
og lige en kommentar.. hvis de ligge i samme mappe.. samme package.. så finder de også hinanden.. du skal bare huske på at java skelner mellem store og små bogstaver!
14. november 2004 - 15:48
#35
ej det virker ikke jeg har lavet mit grundprogram om til en applet og der virker det fint
14. november 2004 - 15:49
#36
jannek_ek: mine kommentare Kommentar: kalp 14/11-2004 15:28:01 Kommentar: kalp 14/11-2004 15:31:08 burde virke.. men som du sagde så siger din main at den ikke kan finde den anden klasse.. så må du sikre dig at du har taget højde for store og små bogstaver... for det skal virke
14. november 2004 - 15:51
#37
det har jeg og jeg tager mine poit igen, for det vil ikke virke...
14. november 2004 - 15:51
#38
beklager
14. november 2004 - 20:31
#39
helt i orden... og hvis du kan så prøv at få en anden til at teste det jeg skrev... du må gøre et eller andet galt for koden virker:)
14. november 2004 - 21:08
#40
-> jannek_ek 1. Som du selv allerede fra starten er inde på, så mangler der en main() metode 2. Du mangler også lige at sætte en størrelse på din Frame Så du tilføjer bare følgende main() metode public static void main( String args[] ){ new VindueInput().setVisible(true); } og sætter størrelsen på din Frame i din jbInit() setSize(300,300); Udfra de fejl du får, tillader jeg mig at tro du ved hvordan classen køres - god fornøjelse
Kurser inden for grundlæggende programmering