2

I'm writing a status checker, it is a java web-start applet. I can run it on my computer and it will run just fine, however; when I run it on a web page I get the runtime error java.lang.reflect.InvocationTargetException. This is the html file I'm using to run the jar file

<html>
    <head>
        <applet code="StatusCheckerMain" width=380 height=172 archive="Launch.jar">
            <param name="servername"
                    value="Evolution-X"/>
            <param name="ip"
                    value="127.0.0.1"/>
            <param name="port"
                    value="43594"/>
            Java is not installed on your machine or your browser does not allow Java Web-Start Applets to run.<br /><br />Get the latest Java technology at <a href="http://www.java.com/">http://www.Java.com/</a>
        </applet>
    </head>
</html>

And this is my source file

import java.awt.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
/**
 *
 * @author Dan
 */
public class GUIChecker extends JApplet {

    public GUIChecker() { }

    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    private String getServerName() {
        if (isActive()) {
            return (getParameter("servername"));
        } else {
            return "Default";
        }
    }
    private String getIP() {
        if (isActive()) {
            return (getParameter("ip"));
        } else {
            return "localhost";
        }
    }
    private int getPort() {
        if (isActive()) {
            return (Integer.parseInt(getParameter("port")));
        } else {
            return 43594;
        }
    }   
    private boolean checkOnline(String ip, int port) throws UnknownHostException, IOException {
        try {
            Socket sock = new Socket(ip, port);
            return sock.isConnected();
        } catch (ConnectException e) {
            return false;
        }
    }
    private String getConnection(String ip, int port) throws UnknownHostException, IOException {
        try {
            Socket sock = new Socket(ip, port);
            return (sock.isConnected() ? "ONLINE" : "OFFLINE");
        } catch (ConnectException e) {
            return ("OFFLINE");
        }
   }
    @SuppressWarnings("unchecked")
    private void initComponents() {

        jScrollPane1 = new JScrollPane();
        jTextArea1 = new JTextArea();
        setVisible(true);
        jTextArea1.setEditable(false);
        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        try {
            Font font = new Font("Verdana", Font.BOLD, 12);
            if (checkOnline(getIP(), getPort())) {
                jTextArea1.setForeground(Color.GREEN);
            } else {
                jTextArea1.setForeground(Color.RED);
            }
            jTextArea1.setFont(font);
            jTextArea1.setText(getServerName()+" IP: "+getIP()+" on port: "+getPort()+" is currently: "+getConnection(getIP(), getPort()));
        } catch (IOException e) {
            e.printStackTrace();
        }

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 385, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(0, 11, Short.MAX_VALUE)
                    .addComponent(jTextArea1, GroupLayout.PREFERRED_SIZE, 383, GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 11, Short.MAX_VALUE)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 121, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(0, 12, Short.MAX_VALUE)
                    .addComponent(jTextArea1, GroupLayout.PREFERRED_SIZE, 119, GroupLayout.PREFERRED_SIZE)
                    .addGap(0, 12, Short.MAX_VALUE)))
        );
        validate();
    }
    private JScrollPane jScrollPane1;
    private JTextArea jTextArea1;
}

enter image description here There is no error when running it on my desktop, but when I run it on my webpage this is all I get.

Clear classloader cache ... completed.
Trace level set to 5: all ... completed.basic: Added progress listener: sun.plugin.util.ProgressMonitorAdapter@844c3d
basic: Plugin2ClassLoader.addURL parent called for file:/C:/Users/Dan/Desktop/Evolution-X/Evolution-X%20639/Evolution-X%20%20639%20Server/Evolution-X%20639%20Server/Evolution-X%20639%20Server/SocketsTest/TestConnection/bin/
network: Cache entry not found [url: file:/C:/Users/Dan/Desktop/Evolution-X/Evolution-X%20639/Evolution-X%20%20639%20Server/Evolution-X%20639%20Server/Evolution-X%20639%20Server/SocketsTest/TestConnection/bin/, version: null]
network: Cache entry not found [url: file:/C:/Users/Dan/Desktop/Evolution-X/Evolution-X%20639/Evolution-X%20%20639%20Server/Evolution-X%20639%20Server/Evolution-X%20639%20Server/SocketsTest/TestConnection/bin/, version: null]
basic: exception: java.lang.reflect.InvocationTargetException.
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.runOnEDTAndWait(Unknown Source)
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.instantiateApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
    at com.sun.deploy.uitoolkit.impl.awt.OldPluginAWTUtil.invokeAndWait(Unknown Source)
    ... 5 more
Caused by: java.lang.ClassCastException: StatusCheckerMain cannot be cast to java.applet.Applet
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter$1.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(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$1.doIntersectionPrivilege(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)
basic: Removed progress listener: sun.plugin.util.ProgressMonitorAdapter@844c3d
security: Reset deny session certificate store
basic: Dialog type is not candidate for embedding
Dan
  • 649
  • 4
  • 11
  • 19
  • *"it is a java web-start applet."* 'No' twice over. 1) It is a frame. 2) It is being launched by a standard applet element, not by JWS. – Andrew Thompson Nov 05 '12 at 00:30
  • `Integer.parseInt(new JApplet().getParameter("port")))` This is pure nonsense! Wherever you got this code from, put it back there and start again. – Andrew Thompson Nov 05 '12 at 00:31

1 Answers1

4

The applet element is for loading classes of type JApplet and Applet, whereas the code is a JFrame.

So start with something like this.

import javax.swing.*;

/*
<applet code=DialerApplet width=250 height=70>
<param name="servername" value="Evolution-X" >
<param name="ip"  value="127.0.0.1" >
<param name="port" value="43594" >
</applet>
*/
public class DialerApplet extends JApplet {
    public void init() {
        JTextArea ta = new JTextArea(20,5);
        add(new JScrollPane(ta));

        String eol = System.getProperty("line.separator");
        StringBuilder sb = new StringBuilder();
        String[] params = {"servername","ip","port"};
        for (String param : params) {
            sb.append( param );
            sb.append( ": " );
            sb.append( getParameter(param) );
            sb.append( eol );
        }
        ta.setText(sb.toString());

        validate();
    }
}

working applet

Update

The important line in the stack trace is:

Caused by: java.lang.ClassCastException: 
    StatusCheckerMain cannot be cast to java.applet.Applet

This is quite strange.

  • The code as per the question extends applet.
  • The console output supports that the cache was flushed (removing old classes that may have been stored).
  • A JApplet extends Applet - so it can be cast.

Make absolutely sure the new Jar is being copied to whatever place the code is being run from. Also try starting a new project and see if you can get the code I posted to launch as an applet on your machine. If not, it indicates a more fundamental problem.

Community
  • 1
  • 1
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
  • Perhaps it's not a web start applet, however; this is the way it will need to be loaded to serve it's purpose, so where should I go from here? – Dan Nov 05 '12 at 01:44
  • Forget 'how it should be loaded' and describe 'where it should appear'. Should it be embedded in a web page, or free floating on the desk-top? – Andrew Thompson Nov 05 '12 at 01:47
  • It needs to be embedded a web page. – Dan Nov 05 '12 at 01:52
  • OK. And why does it 'need' to be deployed using JWS? – Andrew Thompson Nov 05 '12 at 01:53
  • It doesn't need to be deployed using JWS, that was simply a misunderstanding on my end. – Dan Nov 05 '12 at 01:56
  • That's easy, extend `JApplet` instead of JFrame. (Then deal with the next problem..) – Andrew Thompson Nov 05 '12 at 01:58
  • Okay, I've updated my file now and made an edit to my original post with the new code, however; I still have the InvocationTargetException Runtime Error. – Dan Nov 05 '12 at 02:35
  • 1) Copy/paste the entire stack trace as an edit to the question. Use code formatting. 2) Let me know in a comment when it is there. 3) And to keep it brief, remove that rubbish with setting a PLAF. It is just noise. – Andrew Thompson Nov 05 '12 at 02:37
  • Alright, the picture is the error I get, and I've removed where I was setting a PLAF. – Dan Nov 05 '12 at 03:03
  • So when you press `Details` it pops the console with no useful information? This is tricky. Type 'x' then '5' in the console, return to the web page and reload it. – Andrew Thompson Nov 05 '12 at 03:19
  • Thank you, StatusCheckerMain was the source of the problem, I didn't think that would be it so I didn't add the class to the question, yet it was apparently. – Dan Nov 05 '12 at 04:00