Avatar billede jannek_ek Nybegynder
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...
Avatar billede morteeart Nybegynder
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.
Avatar billede morteeart Nybegynder
14. november 2004 - 14:39 #2
ups

java -classpath . DinFil.class

classpath er ikke altid nødvendig, men en god vane at have med.
Avatar billede jannek_ek Nybegynder
14. november 2004 - 14:43 #3
hmm

den returnere det her:

Exception in thread "main" java.lang.NoClassDefFoundError: VindueInput/class
Avatar billede morteeart Nybegynder
14. november 2004 - 14:46 #4
arrg, slå mig..

den er uden .class til sidst.
Avatar billede jannek_ek Nybegynder
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
Avatar billede jannek_ek Nybegynder
14. november 2004 - 14:50 #6
men i lærerbogen står der ikke noget om en main funktion
Avatar billede morteeart Nybegynder
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.
Avatar billede jannek_ek Nybegynder
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();
  }
}
Avatar billede morteeart Nybegynder
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">
Avatar billede jannek_ek Nybegynder
14. november 2004 - 15:09 #10
Det er ikke en applet

men måske mangler jeg en konsol til at kører den i
Avatar billede kalp Novice
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..
Avatar billede kalp Novice
14. november 2004 - 15:11 #12
public class Main
{
public static void main(String[] args)
{
VindueInput start = new VindueInput();

start.JbInit();

}
}


glemte lige noget
Avatar billede kalp Novice
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
Avatar billede morteeart Nybegynder
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..
Avatar billede jannek_ek Nybegynder
14. november 2004 - 15:18 #15
jeg kan nu ikke helt få den til at virke, men det lærer jeg nok senere
Avatar billede kalp Novice
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 :))!
Avatar billede kalp Novice
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();

}
Avatar billede jannek_ek Nybegynder
14. november 2004 - 15:21 #18
ehh hvordan ser koden til det ud??
Avatar billede kalp Novice
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
Avatar billede kalp Novice
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();

}
}
Avatar billede kalp Novice
14. november 2004 - 15:23 #21
DOH!

dette
public class Main
{
public static void main(String[] args)
{
VindueInput start = new VindueInput();

start.JbInit();

}
}
Avatar billede kalp Novice
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();
  }
}
Avatar billede morteeart Nybegynder
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
Avatar billede jannek_ek Nybegynder
14. november 2004 - 15:29 #24
det virker stadig ikke
Avatar billede jannek_ek Nybegynder
14. november 2004 - 15:29 #25
jeg prøver noget andet
Avatar billede kalp Novice
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();
  }
}
Avatar billede kalp Novice
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
Avatar billede kalp Novice
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
Avatar billede kalp Novice
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: )
Avatar billede jannek_ek Nybegynder
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
Avatar billede kalp Novice
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
Avatar billede jannek_ek Nybegynder
14. november 2004 - 15:40 #32
de ligger i den samme mappe
Avatar billede kalp Novice
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();
  }
}
Avatar billede kalp Novice
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!
Avatar billede jannek_ek Nybegynder
14. november 2004 - 15:48 #35
ej det virker ikke

jeg har lavet mit grundprogram om til en applet
og der virker det fint
Avatar billede kalp Novice
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
Avatar billede jannek_ek Nybegynder
14. november 2004 - 15:51 #37
det har jeg og jeg tager mine poit igen, for det vil ikke virke...
Avatar billede jannek_ek Nybegynder
14. november 2004 - 15:51 #38
beklager
Avatar billede kalp Novice
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:)
Avatar billede _carsten Nybegynder
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester