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?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

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
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
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

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:
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

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.