Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Java] & IDE = Jcreator, 2 Klassen in 1 Project?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Geachte Tweakers,

Het boek En dan is er Java objectgeorienteerd ontwerpen en programmeren is waarmee ik nu leer programmeren.

Nou wordt er in hoofdstuk 1 uitgelegd wat een Klasse en Object zijn.

Nou maak ik een nieuwe werkplek in Jcreator, een nieuw project met de naam van de klasse en lukt het mij om een applicatie te maken ( een JFrame, een leeg venster met een titelbalk en uitknop ).


Dit is de code :

// Opstartklasse voor een applicatie
import javax.swing.*;

public class Vb0201 extends JFrame
{
public static void main( String[] args )
{
// Maak een frame
JFrame frame = new Vb0201();
frame.setSize( 400, 200 );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setTitle( "Eerste applicatie" );
frame.setVisible( true );
}
}


Nou wordt er dan gevraagd om een nieuw project op te starten en nu een JFrame en een nieuwe klasse te maken een JPanel.

Deze klassen moeten dus met elkaar werken.


Dit is dan de code hiervoor:


// Voorbeeld 0202
// Opstartklasse voor een applicatie
import javax.swing.*;

public class Vb0202 extends JFrame
{
public static void main( String[] args )
{
// Maak een frame
JFrame frame = new Vb0202();
frame.setSize( 400, 200 );
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setTitle( "Voorbeeld 0202" );
JPanel paneel = new Paneel();
frame.setContentPane( paneel );
frame.setVisible( true );
}
}

class Paneel extends JPanel
{
private JButton knop;
private JTextField tekstvak;

public Paneel()
{
knop = new JButton( "Klik");
tekstvak = new JTextFied( 10 );
add( knop );
add( tekstvak );
}
}


Nadat ik elke stap in het boek meerdere keren heb gevolgt blijft die IDE maar een erorr geven:

Error: Could not find or load main class Vb0202

Zou iemand enig idee hebben waarom hij de nieuw gemaakte klasse niet wilt kunnen vinden of laden?

  • Lethalis
  • Registratie: April 2002
  • Niet online
code:
1
tekstvak = new JTextFied( 10 );


Typefout? ;)

Het moet JTextField zijn ipv JTextFied..

[ Voor 7% gewijzigd door Lethalis op 02-03-2014 11:55 ]

Ask yourself if you are happy and then you cease to be.


Verwijderd

Topicstarter
Deze heb ik al gecorrigeerd, toen ik de instructies van het boek nogmaals probeerden..

Ik heb nogmaals 2 projecten

Project 1 is geslaagd, het maken van een JFrame zonder de JPanel.
Wanneer ik project 2 start, moet ik een JFrame maken met een JPanel.
Ik heb dus 1 klasse gemaakt voor de JFrame en 1 voor de JPanel tezamen in 1 project?

[ Voor 83% gewijzigd door Verwijderd op 02-03-2014 12:04 ]


  • Lethalis
  • Registratie: April 2002
  • Niet online
Staat je class path en dat soort dingen wel goed?

Ik heb jouw Vb0202 class eens in een testproject gezet met NetBeans bij mij en die ene typefout gecorrigeerd en dan werkt het bij mij gewoon :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package testproject;

// Voorbeeld 0202
// Opstartklasse voor een applicatie
import javax.swing.*;

public class Vb0202 extends JFrame {

  public static void main(String[] args) {
    // Maak een frame
    JFrame frame = new Vb0202();
    frame.setSize(400, 200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Voorbeeld 0202");
    JPanel paneel = new Paneel();
    frame.setContentPane(paneel);
    frame.setVisible(true);
  }
}

class Paneel extends JPanel {

  private JButton knop;
  private JTextField tekstvak;

  public Paneel() {
    knop = new JButton("Klik");
    tekstvak = new JTextField(10);
    add(knop);
    add(tekstvak);
  }
}


Wel is het dus zo dat ik nog een package declaratie heb (ik heb gewoon eerst een Vb0202 class gemaakt in mijn IDE en daarna pas jouw code toegevoegd). Misschien dat het daarop bij jou fout gaat? Staan de classes bij jou in een default package?

[ Voor 86% gewijzigd door Lethalis op 02-03-2014 12:12 ]

Ask yourself if you are happy and then you cease to be.


Verwijderd

Topicstarter
Hij geeft inderdaad dit heel snel als eerst aan ; javac: file not found: src_vb0202.txt (The system cannot find the path specified)

en dan geeft hij error aan Error: Could not find or load main class Vb0202

Hoe hoe kan ik dat checken? Ik heb nog geen uitleg gekregen over waar deze packages moeten staan

[ Voor 27% gewijzigd door Verwijderd op 02-03-2014 12:15 ]


  • Lethalis
  • Registratie: April 2002
  • Niet online
Verwijderd schreef op zondag 02 maart 2014 @ 12:12:
Hij geeft inderdaad dit heel snel als eerst aan ; javac: file not found: src_vb0202.txt (The system cannot find the path specified)

en dan geeft hij error aan Error: Could not find or load main class Vb0202
Java code bestanden moeten altijd eindigen met de bestandsextensie .java.

Ik heb dus een Vb0202.java bestand met daarin de code. Dit wordt daarna door de compiler gecompileerd naar een Vb0202.class bestand dat vervolgens wordt geladen.

Ask yourself if you are happy and then you cease to be.


Verwijderd

Topicstarter
Ik kan geen Vb0202 class buiten de IDE vinden, het andere project Vb0201 kan ik wel vinden..

Raar hoe kan dat?

Ik ga anders helemaal weer opnieuw beginnen als het te lastig wordt om mij te helpen

[ Voor 37% gewijzigd door Verwijderd op 02-03-2014 12:20 ]


  • Lethalis
  • Registratie: April 2002
  • Niet online
Verwijderd schreef op zondag 02 maart 2014 @ 12:18:
Ik kan geen Vb0202 vinden, het andere project Vb0201 kan ik wel vinden..

Raar hoe kan dat?
Probeer het project anders gewoon eens opnieuw aan te maken en kijk of de bestanden dan wel op de juiste plek terecht komen?

Ik durf verder geen uitspraken te doen over JCreator. Ik heb er nog nooit mee gewerkt en heb alleen wat ervaring met Eclipse en NetBeans (ben zelf pas een half jaartje met Java bezig aan de Open Universiteit). Ik zie iig geen problemen met de code an sich, en het werkt bij mij gewoon. Dus het heeft echt iets met de configuratie van jouw project te maken vrees ik.

Packages zijn bedoeld om code op te delen in meerdere delen. Een soort namespaces zeg maar.

Als ik bijvoorbeeld een Swing applicatie bouw die zowel een user interface heeft, als domein classes en een datalaag, dan maak ik 3 packages aan. Bijvoorbeeld testprojectdomein, testprojectdata en een testprojectui package. In mijn src map zie je dan een hierarchie:

/src
/src/testprojectdomein/DomeinObject.java
/src/testprojectdomein/NogEenDomeinObject.java
/src/testprojectdata/DataClassje.java
/src/testprojectui/HoofdSchermFrame.java

Dat is een beetje het idee van packages. Bovenaan elk java bestand staat dan dus ook een package declaratie en als ik classes uit een andere package wil gebruiken dan importeer ik die met een import declaratie.

Als je net begint, komen al jouw java bestanden waarschijnlijk terecht in een default package.

[ Voor 70% gewijzigd door Lethalis op 02-03-2014 12:32 ]

Ask yourself if you are happy and then you cease to be.


Verwijderd

Topicstarter
Ik snap het niet, wat ik wel snap is dat ik een package kan importeren

Het duurt nog een half jaar voordat ik deze vragen kan stellen aan de leraar..

In het boek wordt er nog niet uitgelegd hoe je met een IDE omgaat..

[ Voor 135% gewijzigd door Verwijderd op 02-03-2014 12:45 ]


Verwijderd

Topicstarter
Kan iemand mij uitleggen wat hij bedoelt met packages, alles komt inderdaad in een default package zie ik.

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Als al je classes nu in het default package zitten (het default package heeft geen naam), dan is dat prima. Waarschijnlijk worden packages later behandeld. Dit zou geen probleem moeten zijn.

Kijk even goed in je IDE of er niet ergens fouten gerapporteerd worden. Als je ergens een haakje of accolade bent vergeten of een punt-komma, dan gaat je code niet compileren (en krijg je geen .class file).

En let er op dat beide classes wel bij elkaar moeten staan om elkaar te kunnen "zien". Dus als je Vb0202 en Paneel classes naast elkaar staan in hetzelfde package, moet het goed zijn. Denk er ook om, dat Java case-sensitve is. Vb0202 is dus iets anders dan vB0202 en Paneel is iets anders dan paneel.

Overigens: als je nog eens vaker code gaat posten hier op het forum, maak dan a.u.b. even gebruik van de code-tag.

Meer uitleg over packages
Ik zou me eerlijk gezegd nog maar even niet druk maken om packages als je nog op pagina 1 of 2 van je boek bent, maar als je er toch nu al meer van wilt weten: packages zijn zoals gezegd een manier om code te ordenen en dubbele namen te voorkomen.

Packages hebben de vorm: blah.foo.bar. Alle standaard Java classes zitten bijvoorbeeld in packages die beginnen met java, zoals java.lang, java.util, etc. Standaard Java uitbreidingen staan in packages die beginnen met javax, zoals je al gezien hebt: javax.swing is daar een voorbeeld van.

Je moet Java vertellen dat een class in een package zit. Dit door je door op de eerste regel van de class een zogenaamde package declaration te zetten, bijvoorbeeld: package mijn.voorbeeld.project;

De indeling in packages maakt het mogelijk dat er meerdere classes zijn dezelfde naam, terwijl ze iets heel anders doen. Een bekend voorbeeld uit de standaard Java libraries: er zijn twee classes genaamd List, één in het java.util package en één in het java.awt package. Om deze uit elkaar te houden, wordt indien nodig de fully qualified classname (FQCN) gebruikt: java.util.List en java.awt.List.

De indeling in packages heeft ook tot gevolg dat classes elkaar niet zomaar kunnen "zien". Classes uit andere packages moet je importeren voordat je ze kunt gebruiken. Ook dit heb je al gedaan: in je code staat:import javax.swing.*; wat zoveel wil zeggen als: importeer alle classes uit het javax.swing package zodat ik er in deze class gebruik van kan maken.

De meeste classes moet je importeren.Er zijn twee uitzonderingen: classes uit hetzelfde package hoef je niet te importeren en classes uit het package java.lang hoef je ook niet expliciet te importeren, dat doet Java voor je. Daarnaast is er nog een eigenaardigheid m.b.t. het 'default' package: uit dit package kun je niets importeren. Vandaar ook dat het gebruik van het default package meestal wordt afgeraden. Maar voor een voorbeeldprojectje waar alle classes bij elkaar staan, is het geen probleem.

Je eigen code plaats je meestal in een package met een naam die iets met jezelf te maken heeft. Bij bedrijven is de packagenaam volgens de traditie meestal gebaseerd op de omgekeerde domeinnaam. Dus Java code die binnen Tweakers.net geschreven is, zou zitten in packages die beginnen met net.tweakers.

Op je harde schijf zie je packages terug als mappen. Dit is verplicht! Als je in je Java-class zet dat ie in een package zit, moet ie ook in een overeenkomstige map zitten. Dus een class waar in staat package mijn.voorbeeld.project; moet zitten in een map genaamd ...\mijn\voorbeeld\project. IDE's zorgen hier in de meeste gevallen automatisch voor als je een class aanmaakt of verplaatst.

[ Voor 66% gewijzigd door Herko_ter_Horst op 02-03-2014 17:24 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Verwijderd

Topicstarter
Hartelijk dank voor het advies,

Is het normaal om in het begin van het leren van programmeren met bijv Java, meerdere malen de tekst te moeten doornemen om te begrijpen wat elk woord en teken kan doen?

Want ik begreep pas na een half uur puzzelen met mijn gedachten en het boek wat een klasse en methode zijn en hoe deze ingedeeld zijn in de code

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Ja, dat is normaal :)

"Any sufficiently advanced technology is indistinguishable from magic."


  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 16-05 03:04
Verwijderd schreef op zondag 02 maart 2014 @ 15:11:
...

Want ik begreep pas na een half uur puzzelen met mijn gedachten en het boek wat een klasse en methode zijn en hoe deze ingedeeld zijn in de code
Ik zou zelfs bijna zeggen dat een half uur best snel is. Toen ik met mijn studie begon waren er mensen die het na een half jaar nog niet helemaal begrepen :+

Verwijderd

Topicstarter
Hhh dat geeft mij een glimlach op mn gezicht ty lol.

Verwijderd

Topicstarter
Ja!! Ik kan eindelijk verder, ik heb het geprobeerd in een andere IDE ( ECLIPSE ) en daar lukte het wel in de default packages

[ Voor 22% gewijzigd door Verwijderd op 02-03-2014 17:22 ]

Pagina: 1