[ karas @ 10.10.2003. 15:29 ] @
U fajlu MyClass.java je:

Code:

package mypackage;
import mypackage.*;

public class MyClass
{
  public static void main(String args[])
  {
    OtherClass c = new OtherClass();
  }
}


A u fajlu OtherClass.java:

Code:

package mypackage;

class OtherClass
{
  public OtherClass()
  {
    System.out.println("Hello, World!");
  }
}


Prevodilac "cannot resolve symbol" OtherClass u MyClass.java. Zashto?
[ Gojko Vujovic @ 11.10.2003. 20:30 ] @
Pošalji kompletan output, tačno kakvu grešku dobiješ?

Uglavnom, znam gde se najčešće greši kod toga pa evo šta da probaš u međuvremenu.

Napravi direktorijum koji se zove isto kao package koji praviš (mypackage). U njega ubaci oba .java source fajla i kucaj 'javac *.java'. Zatim siđi direktorijum "niže" (cd ..) i tamo pokreni to sa 'java mypackage.MyClass'.

Kod je ispravan inače i radiće. Pazi na mala i velika slova i kod komandi i kod davanja imena fajlovima, java je case sensitive. Ako ništa od toga ne pomogne, daj kompletnu prepisku šta si radio kao i sadržaj fajlova i direktorijuma, pa da vidimo.
[ karas @ 13.10.2003. 22:13 ] @
javac *.java prevodi bez problema, ali pri izvrshavanju nastaje problem. Sledecci kod ne mozze da se izvrshi ako se ukljuche redovi "package mypackage" i "import mypackage" u oba fajla, dok sve lepo radi kad ih nema!?


Code:

/*                  MyMain.java

Prikazuje jednostavan JFrame sa JButton koji pokrecce MyDialog.

*/

// package mypackage;

// import mypackage.*;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class MyMain extends JFrame
{
// Fields


  JButton b = new JButton("button");


// Constructors


  public MyMain()
  {
    b.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        JDialog d = new MyDialog(MyMain.this);
      }
    });
    getContentPane().setLayout(new FlowLayout());
    getContentPane().add(b);
    addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
        System.exit(0);
      }
    });
    setSize(200, 200);
    setLocation(100, 100);
    setVisible(true);
  }


// Methods


  public static void main(String args[])
  {
    MyMain m = new MyMain();
  }
}



Code:

/*                MyDialog.java  

Prazan JDialog.

*/

// package mypackage;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


class MyDialog extends JDialog
{
  public MyDialog(JFrame parent)
  {
    super(parent, "My Dialog", true);
    addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
        dispose();
      }
    });
    setSize(100, 100);
    setLocation(100, 100);
    setVisible(true);
  }
}



Sve se lepo prevede ali "java MyMain" izbacuje

Exception in thread "main" java.lang.NoClassDefFoundError: MyMain (wrong name: mypackage/MyMain)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:488)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:106)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:243)
at java.net.URLClassLoader.access$100(URLClassLoader.java:51)
at java.net.URLClassLoader$1.run(URLClassLoader.java:190)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:183)
at java.lang.ClassLoader.loadClass(ClassLoader.java:294)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:288)
at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:310)

[ sspasic @ 13.10.2003. 22:58 ] @
Kao sto ti je Gojko rekao ako imas 'package mypackage' *.class fajlovi moraju da budu u direktorijumu koji se zove 'mypackage'.

Java interpreter *.class fajlove trazi u direktorijumima i jar/war/ear/... fajlovima navedenim u envirnoment promenljivoj CLASSPATH, u spisku koji zadajes opcionim parametrom -classpath i u aktivnom direktorijumu, u poddirektorijumu koji se zove isto kao i paket (npr. za org.es.Klasa class fajl bi npr. trebalo da se nalazi ispod ./org/es u fajlu Klasa.class)

Po gresci koja ti se javlja imam utisak da si interpreter pokrenuo iz direktorijuma mypackage a trebalo je iz onog iznad.

Inace, 'package mypackage' implicitno uvozi sve klase iz istog paketa, tako da 'import mypackage' nije neophodan.
[ karas @ 14.10.2003. 11:56 ] @
Sve sam ja to uradio i pre nego shto sam postavio pitanje ali nije ishlo. Sad sam video da umesto "java MyMain" iz mypackage direktorijuma treba "java mypackage/MyMain" iz roditeljskog direktorijuma od mypackage!? Zashto tako?
[ Java Beograd @ 03.11.2003. 14:24 ] @
Upravo zato sto si definisao package.