J
johnmmcparland
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
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