@jarekr000000 i @Jaca777
jakie znaczenie podczas uruchamiania programów ma zawartość katalogu c:\Program Files\java\jdk1.8.0_40...
?
brakujące pliki miałem w katalogu c:\Program Files\java\jdk1.8.0_40\jre\lib
,
po skopiowaniu do katalogu c:\Program Files\java\jdk1.8.0_40\lib
, komunikat się zmienił:
Caused by: java.lang.InternalError: Currency data format is incorrect
at java.util.Currency$1.run(Unknown Source)
at java.util.Currency$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.util.Currency.<clinit>(Unknown Source)
at java.text.DecimalFormatSymbols.initialize(Unknown Source)
at java.text.DecimalFormatSymbols.<init>(Unknown Source)
at sun.util.locale.provider.DecimalFormatSymbolsProviderImpl.getInstan
(Unknown Source)
at java.text.DecimalFormatSymbols.getInstance(Unknown Source)
at sun.util.locale.provider.NumberFormatProviderImpl.getInstance(Unkno
Source)
at sun.util.locale.provider.NumberFormatProviderImpl.getIntegerInstanc
Unknown Source)
at java.text.NumberFormat.getInstance(Unknown Source)
at java.text.NumberFormat.getInstance(Unknown Source)
at java.text.NumberFormat.getIntegerInstance(Unknown Source)
at java.text.SimpleDateFormat.initialize(Unknown Source)
at java.text.SimpleDateFormat.<init>(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.initializeHeaders(Unkno
Source)
at sun.net.www.protocol.file.FileURLConnection.getHeaderField(Unknown
urce)
at sun.net.www.URLConnection.getContentType(Unknown Source)
at javax.swing.JEditorPane.handleConnectionProperties(Unknown Source)
at javax.swing.JEditorPane.access$300(Unknown Source)
at javax.swing.JEditorPane$3.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectio
rivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
W klasie Trajectories
jest wywołanie konstruktora
helpPanel = new HelpHtml("resources/SystemyHelp.html","Opis programu",new Dimension(800,600),true,"resources",this);
Klasa HelpPanel
wygląda tak:
package bs.utils;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.Document;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLFrameHyperlinkEvent;
public class HelpHtml extends JFrame implements HyperlinkListener
{
private static final long serialVersionUID = 1L;
private JEditorPane ep = new JEditorPane();
private JButton back;
private JButton forward;
private JButton home;
private JButton refresh;
private ArrayList<URL> urls = new ArrayList<URL>();
private int currentUrl = 0;
private URL url = null;
private String subdirectory = "resources";
private boolean ok = true;
//------------------------
public HelpHtml(String fileName, String title, Dimension dimension, boolean navigationBar, String subdirectory, Component component)
{
setTitle(title);
this.subdirectory = subdirectory;
String helpFile = System.getProperty("currentUser.dir",".") + "/" + fileName;
File file = new File(helpFile);
if(!file.exists())
{
ok = false;
}
if(ok)
{
try
{
url = new URL("file:" + helpFile);
}
catch(Exception e)
{
My.say(e.getMessage(),component);
ok = false;
}
}
if(ok)
{
urls.add(url);
setLayout(new BorderLayout(2,2));
ep.setEditable(false);
ep.addHyperlinkListener(this);
try
{
ep.setPage(url);
}
catch (Exception e)
{
My.say(e.getMessage(),component);
e.printStackTrace();
ok = false;
}
}
if(ok)
{
JScrollPane sp = new JScrollPane(ep);
sp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
sp.setPreferredSize(dimension);
ep.setDocument((HTMLDocument)ep.getDocument());
add(sp,BorderLayout.CENTER);
if(navigationBar)
{
createToolBar();
}
pack();
}
setVisible(false);
}
//---------------------------
public HelpHtml(String fileName, String title, Dimension dimension, boolean navigationBar)
{
this(fileName, title, dimension, navigationBar, "resources", null);
}
//---------------------------
public HelpHtml(String fileName, String title, Dimension dimension)
{
this(fileName, title, dimension, true);
}
//---------------------------
public HelpHtml(String fileName, String title)
{
this(fileName, title, new Dimension(800,600), true);
}
//---------------------------
public HelpHtml(String fileName)
{
this(fileName, "Objaśnienia", new Dimension(800,600), true);
}
//---------------------------
private void createToolBar()
{
back = new JButton(new ImageIcon(subdirectory + "/Back.gif"));
forward = new JButton(new ImageIcon(subdirectory + "/Forward.gif"));
home = new JButton(new ImageIcon(subdirectory + "/Home.gif"));
refresh = new JButton(new ImageIcon(subdirectory + "/Refresh.gif"));
JToolBar tb = new JToolBar();
back.setToolTipText("Wstecz");
back.addActionListener(e -> back());
back.setEnabled(false);
tb.add(back);
forward.setToolTipText("Naprzód");
forward.addActionListener(e -> forward());
forward.setEnabled(false);
tb.add(forward);
home.setToolTipText(url.toString());
home.addActionListener(e -> home());
home.setEnabled(false);
tb.add(home);
refresh.setToolTipText("Odświeżenie");
refresh.addActionListener(e -> refresh());
refresh.setEnabled(true);
tb.add(refresh);
add(tb,BorderLayout.NORTH);
}
//---------------------------
public boolean isOk()
{
return ok;
}
//---------------------------
public void hyperlinkUpdate(HyperlinkEvent e)
{
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
{
if (e instanceof HTMLFrameHyperlinkEvent)
{
HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent)e;
HTMLDocument doc = (HTMLDocument)ep.getDocument();
doc.processHTMLFrameHyperlinkEvent(evt);
}
else
{
try
{
URL newUrl = e.getURL();
ep.setPage(newUrl);
if(currentUrl == urls.size()-1)
{
urls.add(newUrl);
currentUrl++;
setButtons();
return;
}
if(newUrl.equals(urls.get(currentUrl+1)))
{
currentUrl++;
setButtons();
return;
}
for(int i=currentUrl;i<urls.size();i++)
{
if(i > 0)
{
urls.remove(i);
}
}
urls.add(newUrl);
currentUrl++;
setButtons();
}
catch (Throwable t)
{
My.showStack(t,10);
}
}
}
}
//------------------------
private void back()
{
try
{
ep.setPage(urls.get(currentUrl - 1));
currentUrl--;
setButtons();
}
catch(Throwable t)
{
My.showStack(t,10);
}
}
//------------------------
private void forward()
{
try
{
ep.setPage(urls.get(currentUrl+1));
currentUrl++;
setButtons();
}
catch(Throwable t)
{
My.showStack(t,10);
}
}
//------------------------
private void home()
{
try
{
ep.setPage(url);
currentUrl = 0;
setButtons();
}
catch(Throwable t)
{
My.showStack(t,10);
}
}
//------------------------
private void refresh()
{
try
{
Document doc = ep.getDocument();
doc.putProperty(Document.StreamDescriptionProperty,null);
ep.setPage(urls.get(currentUrl));
setButtons();
}
catch(Throwable t)
{
My.showStack(t,10);
}
}
//------------------------
private void setButtons()
{
if(urls.size() <= 1)
{
back.setEnabled(false);
home.setEnabled(false);
forward.setEnabled(false);
}
else
{
if(currentUrl == 0)
{
back.setEnabled(false);
home.setEnabled(false);
forward.setEnabled(true);
return;
}
if(currentUrl == urls.size() - 1)
{
back.setEnabled(true);
home.setEnabled(true);
forward.setEnabled(false);
return;
}
back.setEnabled(true);
home.setEnabled(true);
forward.setEnabled(false);
}
}
}