compiling, executing problems after re-structuring program into packages

I've broken my application, because I don't fully understand how to use packages

I've tried to make a test program with the same structure and can't get it to work either.

My question is how to get my test program to work, so I can apply the solution to my broken application.

Here is the test program:

my directory structure is
/main/packageExample/topPackage/subPackage/subSubPackage

topPackage directory contains one file

Top.java

subPackage directory contains one file

Sub.java

subSubPackage directory contains one file

SubSub.java

I want to run Top , which will call Sub, which will call SubSub, where
Top is in package topPackage
Sub is in a subPackage (sub package of topPackage)
and SubSub is in subSubPackage (a sub package of subPackage)

Here is what I came up with for the contents of these 3 files

FILE: Top.java
----------------

package topPackage;
import java.io.*;
import subPackage.*;

public class Top
{
    public static void main(String[] args) throws IOException
    {
       Top top = new Top( );
    }

  public Top( )
  {
    topString = new String("Hello Top");
    sub = new Sub( );
  }
 String topString;
 Sub sub;
 }


FILE: Sub.java
----------------------------

package topPackage.subPackage;
import subSubPackage.*;

public class Sub
{
  public Sub( )
  {
    subString = new String("Hello Sub");
    subSub = new SubSub( );
  }
 String subString;
 SubSub subSub;
}

FILE: SubSub.java
----------------------------

package topPackage.subPackage.subSubPackage;

public class SubSub
{
  public SubSub( )
  {
    subSubString = new String("Hello SubSub");
  }
 String subSubString;
}

mitchguyAsked:
Who is Participating?
 
TimYatesConnect With a Mentor Commented:
Here are the files I'm compiling:
------------------------

package topPackage.subPackage.subSubPackage;

public class SubSub
{
  public SubSub( )
  {
    System.out.println("Hello SubSub");
  }
 String subSubString;
}

----------------------

package topPackage.subPackage;
import topPackage.subPackage.subSubPackage.*;

public class Sub
{
  public Sub( )
  {
    System.out.println("Hello Sub");
    subSub = new SubSub( );
  }
 String subString;
 SubSub subSub;
}

-------------------------------

package topPackage;

import java.io.*;
import topPackage.subPackage.*;

public class Top
{
    public static void main(String[] args) throws IOException
    {
       Top top = new Top( );
    }

  public Top( )
  {
    System.out.println( "Hello Top" ) ;
    sub = new Sub( );
  }
 String topString;
 Sub sub;
}

-------------------------------

They're in this structure:

[tyates@linux java]$ find topPackage/ -name *.java
topPackage/subPackage/subSubPackage/SubSub.java
topPackage/subPackage/Sub.java
topPackage/Top.java

-------------------------------

they compile like this:

[tyates@linux java]$ javac -classpath . topPackage/Top.java topPackage/subPackage/Sub.java topPackage/subPackage/subSubPackage/SubSub.java

--------------------------------

And run like this:

[tyates@linux java]$ java -cp . topPackage.Top
Hello Top
Hello Sub
Hello SubSub
0
 
mitchguyAuthor Commented:
I forgot to add println's to each constructor, I wanted to print out each hello string
when I instanstiate Top( )
0
 
zzynxSoftware engineerCommented:
I would write the following (but don't know if that's the solution):


FILE: Top.java
----------------
package topPackage;
import java.io.*;
import topPackage.subPackage.*;
...

FILE: Sub.java
----------------------------
package subPackage;
import topPackage.subPackage.subSubPackage.*;
...

FILE: SubSub.java
----------------------------
package subSubPackage;
...
0
Cloud Class® Course: Microsoft Windows 7 Basic

This introductory course to Windows 7 environment will teach you about working with the Windows operating system. You will learn about basic functions including start menu; the desktop; managing files, folders, and libraries.

 
TimYatesCommented:
What's the problem?  Compiling or running?

I guess running, as that should all compile ok...

cd /main/packageExample/
java -cp . topPackage.Top
0
 
zzynxSoftware engineerCommented:
>> I've broken my application
What (compiler or runtime) errors do you get?
0
 
TimYatesCommented:
> as that should all compile ok...

Ahhhh!  Nope, I think zzynx has hit the nail on the head...

Your imports are wrong...
0
 
TimYatesCommented:
imports need to be absolute, not relative (as zzynx said) :-)
0
 
mitchguyAuthor Commented:
I added the absolute paths

FILE: Sub.java
----------------------------

package topPackage.subPackage;
import topPackage.subPackage.subSubPackage.*;

public class Sub
{
  public Sub( )
  {
    subString = new String("Hello Sub");
    subSub = new SubSub( );
  }
 String subString;
 SubSub subSub
}



FILE: Top.java
----------------

package topPackage;
import java.io.*;
import topPackage.subPackage.*;

public class Top
{
    public static void main(String[] args) throws IOException
    {
       Top top = new Top( );
    }

  public Top( )
  {
    topString = new String("Hello Top");
    sub = new Sub( );
  }
 String topString;
 Sub sub;
 }


when I try to compile Top.java I get errors
package topPackage.subPackage does not exist

cannot resolve symbol Sub

when I try to compile Sub.java I get errors
package topPackage.subPackage.subSubPackage does not exist
cannot resolve symbol SubSub

when I try to compile SubSub.java it compiles fine
0
 
zzynxSoftware engineerCommented:
In my comment I removed the "paths" in the lines

       package xxxx;
0
 
zzynxSoftware engineerCommented:
>> when I try to compile SubSub.java it compiles fine
Did you try compiling Sub.java hereafter?
And then Top.java after that?
0
 
mitchguyAuthor Commented:
I just removed the paths in the lines package xxxx;
and still get the same thing

I have tried recompiling Sub.java after compiling SubSub.java

still get  errors
package topPackage.subPackage.subSubPackage does not exist
cannot resolve symbol SubSub
0
 
TimYatesCommented:
cd /main/packageExample/
javac -cp . topPackage/Top.java topPackage/subPackage/Sub.java topPackage/subPackage/subSubPackage/SubSub.java
0
 
mitchguyAuthor Commented:
I did
cd /main/packageExample/
javac -classpath . topPackage/Top.java topPackage/subPackage/Sub.java topPackage/subPackage/subSubPackage/SubSub.java

I get the errors:
./topPackage/subPackage/Sub.java:5: duplicate class: subPackage.Sub
public class Sub
         ^

topPackage/Top.java:20: cannot access topPackage.subPackage.Sub
bad class file: ./topPackage/SubPackage/Sub.java
file does not contain class topPackage.subPackage.Sub
Please remove or make sure it appears in the correct subdirectory of the classpath
Sub sub;
^
2 errors

I am compiling on a linux OS by the way, I don't think that matters
0
 
mitchguyAuthor Commented:
Are you able to compile everything using what you suggested and it's just me???

>>cd /main/packageExample/
>>javac -cp . topPackage/Top.java topPackage/subPackage/Sub.java >>topPackage/subPackage/subSubPackage/SubSub.java


0
 
TimYatesCommented:
Try removing all *.class files  they may be conflicting with the new package structure...

Tim
0
 
mitchguyAuthor Commented:
I had a mismatch of combinations, from the suggested solutions and I was compiling wrong.
I used your compilation suggestion, but with the paths removed from the package statements and then I put the paths back in, but then only compiled with javac *.java, which is the way I learned to compile things, which is obviously not good for bigger applications

I got it compiled and running now

can you explain the line
>>java -cp . topPackage.Top

I've never compiled like that before
Thanks

0
 
zzynxSoftware engineerCommented:
mitchguy, sorry if it looked like if I wasn't interested anymore to help you, but I had to go offline.
But with Tim you were in safe hands. ;°)
0
 
TimYatesCommented:
> But with Tim you were in safe hands. ;°)

:-)

Good luck mitchguy!!

Tim
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.