Solved

compiling, executing problems after re-structuring program into  packages

Posted on 2004-09-20
18
215 Views
Last Modified: 2012-05-05
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;
}

0
Comment
Question by:mitchguy
  • 7
  • 6
  • 5
18 Comments
 

Author Comment

by:mitchguy
Comment Utility
I forgot to add println's to each constructor, I wanted to print out each hello string
when I instanstiate Top( )
0
 
LVL 37

Expert Comment

by:zzynx
Comment Utility
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
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
What's the problem?  Compiling or running?

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

cd /main/packageExample/
java -cp . topPackage.Top
0
 
LVL 37

Expert Comment

by:zzynx
Comment Utility
>> I've broken my application
What (compiler or runtime) errors do you get?
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
> as that should all compile ok...

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

Your imports are wrong...
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
imports need to be absolute, not relative (as zzynx said) :-)
0
 

Author Comment

by:mitchguy
Comment Utility
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
 
LVL 37

Expert Comment

by:zzynx
Comment Utility
In my comment I removed the "paths" in the lines

       package xxxx;
0
 
LVL 37

Expert Comment

by:zzynx
Comment Utility
>> when I try to compile SubSub.java it compiles fine
Did you try compiling Sub.java hereafter?
And then Top.java after that?
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 

Author Comment

by:mitchguy
Comment Utility
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
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
cd /main/packageExample/
javac -cp . topPackage/Top.java topPackage/subPackage/Sub.java topPackage/subPackage/subSubPackage/SubSub.java
0
 

Author Comment

by:mitchguy
Comment Utility
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
 

Author Comment

by:mitchguy
Comment Utility
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
 
LVL 35

Accepted Solution

by:
TimYates earned 100 total points
Comment Utility
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
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
Try removing all *.class files  they may be conflicting with the new package structure...

Tim
0
 

Author Comment

by:mitchguy
Comment Utility
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
 
LVL 37

Expert Comment

by:zzynx
Comment Utility
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
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
> But with Tim you were in safe hands. ;°)

:-)

Good luck mitchguy!!

Tim
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now