.sea.monkey.: package problem

Hi,
ich mache grade für die uni eine etwas komplexer Anwendung und fange daher grade an die datei in packages unterzubringen um so für etwas "Struktur" zu sorgen. Problem das jetzt auftaucht ist, dass die eine Klasse eine andere nicht findet obwohl sie imselben package liegt.

Ich erinnere mich dunkel an sowas wie "setz den classpath" aber das kann doch nicht die lösung sein. Ich kann doch meinem prof nich ne anwendung geben die es erfordert das er erstmal den classpath setzt damit sie läuft? oder doch? bin grade etwas durch und sehe glaube ich grade eine sehr nahe liegende lösung nicht.
Kann mir mal bitte jemand auf die sprünge helfen?

einfaches Beispiel:

Klasse CognitiveGUI

package gui;
import javax.swing.*;
import java.awt.event.WindowEvent;
import java.awt.AWTEvent;

public class CognitiveGUI extends JFrame
{
public CognitiveGUI ()
{
     this.addWindowListener(new GUIWindowAdapter());
}

}

und Klasse GUIWindowAdapter

package gui;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class GUIWindowAdapter extends WindowAdapter
{
public GUIWindowAdapter(){}
}

liegen imselben Package. Beim Kompilieren kommt der Fehler:

cannot resolve Symbol
symbol  : class GUIWindowAdapter
location: package gui
  this.addWindowListener(new gui.GUIWindowAdapter());
                                              ^
1 error

Wenn ich die erste zeile in beiden Klassen rausnehme (also package gui;) da gehts....warum?

  1. Hej,

    package gui;  
      
    import javax.swing.*;  
    import java.awt.event.WindowEvent;  
    import java.awt.AWTEvent;  
      
    public class CognitiveGUI extends JFrame{  
       public CognitiveGUI (){  
          this.addWindowListener(new GUIWindowAdapter());  
       }  
    }  
      
    package gui;  
      
    import java.awt.event.WindowAdapter;  
    import java.awt.event.WindowEvent;  
      
    public class GUIWindowAdapter extends WindowAdapter{  
       public GUIWindowAdapter(){}  
    }
    

    Der Code ist definitv sauber, und Klassen die im selben Paket liegen müssen ihr Paket weder gegenseitig importieren, noch müssen sie vollqualifiziert werden.

    Wenn ich die erste zeile in beiden Klassen rausnehme (also package gui;) da gehts....warum?

    Wahrscheinlich hängt es dann wirklich mit dem Classpath zusammen, aber die Deklaration zu entfernen kann ja nicht Sinn der Sache sein. Wenn ich das aber recht in Erinnerung habe: Sind die Klassen einmal erfolgreich druchkompiliert benötigt man den Classpath nur noch wenn das Programm auf externe Pakete, die nicht mitgeliefert sind zugreift. Insofern ist das dann auch deinem Prof gegenüber nicht Deine Aufgabe dich drumzukümmern. am saubersten ist in dem Zusammenhang natürlich, deine ganze Software inkl. benutzter (Nicht-JRE-) Pakete in ein Jar zu packen.

    So nun habe ich versucht dein Problem nachzuvollziehen, und würde mich auch nicht mehr als blutigen Java-Anfänger bezeichnen, aber daran scheitere ich nun seit 2 Stunden. Mir bleibt dir nur noch ein Tip zu geben, den ich seit meinen ersten Tagen beherzige: Nutze ne IDE die sich um alles kümmert. Ich empfehle Eclipse. Is zwar nicht schön zu wissen, dass mans ohne IDE nicht hinbekommt, is aber auch nicht schön ohne Erfolg nen halbes Wochenende rumzukaspern.

    Ansonsten findest Du ja noch vielleicht den entscheidenden Tip wo er mir verwehrt blieb:
    Java ist auch eine Insel 4
    javabuch
    J2SE Documentation

    Beste Grüße
    Biesterfeld

    --
    Selfcode:
    fo:| br:> n4:? ie:{ mo:} va:} de:] zu:| fl:| ss:| ls:]
    1. Hallo,

      So nun habe ich versucht dein Problem nachzuvollziehen, und würde mich auch nicht mehr als blutigen Java-Anfänger bezeichnen, aber daran scheitere ich nun seit 2 Stunden.

      *g* Wahrscheinlich begehst Du _den_ Standard-Fehler bei der Package-Compilierung und versuchst ein Package von Innen zu compilieren.

      Die Quellcodedateien für Dein Package gui müssen im Dateisystem in einem Verzeichnis gui liegen. Bsp. Windows:
      C:\javabsp\gui\

      Das Compilieren, also das Aufrufen von javac, darf allerdings _nicht_ aus diesem Verzeichnis heraus erfolgen, sondern aus dem darüberliegenden. Bsp. Windows:
      C:\javabsp> javac .\gui\namederjavadatei.java

      Start dann mit:
      C:\javabsp> java gui.namederclass

      viele Grüße

      Axel

      1. Hej Axel,

        f#@k ...

        *g* Wahrscheinlich begehst Du _den_ Standard-Fehler bei der Package-Compilierung und versuchst ein Package von Innen zu compilieren.

        Dank dir ganz herzlich! War mir auch wirklich neu gewesen, aber ich habs nun hingekriegt.

        Beste Grüße
        Biesterfeld

        --
        Selfcode:
        fo:| br:> n4:? ie:{ mo:} va:} de:] zu:| fl:| ss:| ls:]