Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / October 2006

Tip: Looking for answers? Try searching our database.

html contained in jar

Thread view: 
johnmmcparland - 09 Oct 2006 09:55 GMT
Hi all,

this seems like a commonly asked question, but so far I haven't found
an answer that works.

I wish to have a jar file which by containing a class which extends
JEditorPane and some html files, will display the html files which are
located inside the jar.

At the moment, I have a jar file with the following contents;

META-INF/
META-INF/MANIFEST.MF
help/
help/index.html
ui/
ui/Browser$HTMLBrowser$LinkListener.class
ui/Browser$HTMLBrowser.class
ui/Browser.class
ui/Browser.java

The Browser inner class HTMLBrowser extends JEditorPane to display html
(in this case help/index.html).

The code is below,

package ui;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;

public class Browser extends JFrame
{
    private HTMLBrowser browser;
    private static final long serialVersionUID= 1;

    public Browser()
    {
     setTitle("Help");
         browser= new HTMLBrowser();
         setContentPane(browser);
         setSize(800,600);
         setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
         setLocationRelativeTo(null);
         setVisible(true);
    }

    private class HTMLBrowser extends JEditorPane
    {
      private static final long serialVersionUID= 2;
      private static final String dir= "help";
      private static final String startPage= "index.html";

       public HTMLBrowser()
       {
           URL url;
           try
           {
               // Construct the URL
               // This is;
               // current dir + separator + help dir + separator + startPage
               String s= (new File(".")).getCanonicalPath();
               String separator= System.getProperty("file.separator");
               String t= s + separator + dir + separator + startPage;
                       // DEBUG
                       System.out.println(t);
               File f= new File(t);
               url= f.toURL();
               setPage(url);
           }
           catch (Exception e)
           {
           System.out.println( "Problem setting help homepage");
           }
          setEditable(false);
          addHyperlinkListener(new LinkListener(this));
      }

        private class LinkListener implements HyperlinkListener
        {
            private HTMLBrowser browser;

            public LinkListener(HTMLBrowser b)
            {
                browser= b;
            }

            public void hyperlinkUpdate(HyperlinkEvent he)
            {
                if (he.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
                {
                    try
                                   {
                     URL newPage = he.getURL();
                                browser.setPage(newPage);

                                   }
                                   catch (IOException ioe)
                                   {
                       System.out.println( "Error opening new page");
                                   }
                   }
              }
        }

    }

    public static void main(String[] args)
    {
        new Browser();
    }

}

When I run this using "java Browser" (inside ui dir") it works (i.e.
displays the html page I want)
When I run the jar in the directory containing the "help" and "ui"
directories it works fine.
But when I run the jar anywhere else it does not work.  The html page
is not displayed.  Instead a blank JEditorPane is all that can be seen.

How can I get my class to look at the help/index.html file from within
the jar?

Thanks in advance,

John
Andrew Thompson - 09 Oct 2006 12:11 GMT
...
> this seems like a commonly asked question, but so far I haven't found
> an answer that works.
..
> How can I get my class to look at the help/index.html file from within
> the jar?

getResource()

Andrew T.
johnmmcparland - 09 Oct 2006 16:25 GMT
Nope I'm afraid that using get resource as follows;

       public HTMLBrowser()
       {
           URL url;
           try
           {
               // Construct the URL
               String separator= System.getProperty("file.separator");
               String t= separator + dir + separator + startPage;
                       // DEBUG
                       System.out.println(t);
                       url= getClass().getResource(t);
               setPage(url);
           }
           catch (Exception e)
           {
           System.out.println( "Problem setting help homepage");
           }
          setEditable(false);
          addHyperlinkListener(new LinkListener(this));
      }

did not work.

> ...
> > this seems like a commonly asked question, but so far I haven't found
[quoted text clipped - 6 lines]
>
> Andrew T.
johnmmcparland - 09 Oct 2006 16:28 GMT
Hmm but constructing the string as so;

               String t= "/" + dir + "/" + startPage;

does work.  Strange.

> Nope I'm afraid that using get resource as follows;
>
[quoted text clipped - 31 lines]
> >
> > Andrew T.
Andrew Thompson - 09 Oct 2006 17:16 GMT
> Hmm

Pleas refrain from top-posting - even when replying
to your own posts..

top-post corrected for clarity.
> > > > How can I get my class to look at the help/index.html file from within
> > > > the jar?
> > >
> > > getResource()
...
>...but constructing the string as so;
>
>                String t= "/" + dir + "/" + startPage;
>
> does work.  Strange.

Not so strange, really.  URL's always use the '/'.

Using the file separator is only appropriate for getting
files off the 'file system', as opposed to resources out
of jar archives.

HTH

Andrew T.


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.