0

Hey all,

I have a JApplet that runs in browser and I can't get it to create a new JFrame popup when a button is clicked. It works fine in my IDE (Eclipse) but not when I upload it. Here's the code for the JFrame I'm trying to create:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import org.jdesktop.swingx.*;

public class SchedWind {

    private String selectedDate;
    private PHPHandler phpMain;
    private ResponseObj[] serverPHPresponse;
    private final JLabel hotStatus;

    public SchedWind() {
        hotStatus = new JLabel("Waiting for user...");
        serverPHPresponse = null;
        selectedDate = null;
        phpMain = new PHPHandler();
        showGUI();
    }

    public void showGUI() {
        final JFrame frame = new JFrame("Schedule");
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setResizable(false);
        GridBagLayout gLayout = new GridBagLayout();
        frame.setLayout(gLayout);
        GridBagConstraints c = new GridBagConstraints();

        hotStatus.setForeground(Color.BLUE);
        hotStatus.setVerticalAlignment(JLabel.CENTER);
        hotStatus.setHorizontalAlignment(JLabel.CENTER);

        JLabel selectDayLabel = new JLabel("Please select day:");
        selectDayLabel.setOpaque(false);
        selectDayLabel.setPreferredSize(new Dimension(170,30));
        selectDayLabel.setHorizontalAlignment(JLabel.CENTER);
        selectDayLabel.setVerticalAlignment(JLabel.CENTER);
        c.fill = GridBagConstraints.HORIZONTAL;
        c.gridx = 0;
        c.gridy = 0;
        frame.add(selectDayLabel, c);

        final JXDatePicker datePicker = new JXDatePicker();
        datePicker.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                selectedDate = datePicker.getDate().toString();
                //System.out.println(selectedDate);
            }
        });
        c.gridx = 1;
        c.gridy = 0;
        frame.add(datePicker, c);

        JButton grabSched = new JButton("OK");
        c.gridx = 0;
        c.gridy = 1;
        c.anchor = GridBagConstraints.CENTER;
        c.insets = new Insets(20,10,0,0);
        grabSched.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(selectedDate == null) {
                    hotStatus.setText("Please enter a date.");
                    hotStatus.setForeground(Color.RED);
                }
                else {
                    hotStatus.setText("Contacting server...");
                    hotStatus.setForeground(Color.BLUE);
                    //System.out.println(selectedDate);
                    grabSchedFromServer();
                }
            }
        });
        frame.add(grabSched, c);

        JButton cancel = new JButton("Cancel");
        c.gridx = 1;
        c.gridy = 1;
        frame.add(cancel, c);
        cancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                frame.dispose();
            }
        });


        c.gridx = 0;
        c.gridy = 3;
        c.gridwidth = 2;
        frame.add(hotStatus, c);

        frame.pack();
        frame.setVisible(true);
    }

    protected void grabSchedFromServer() {
        String[] conArr = selectedDate.split(" ");
        String mo = conArr[1];
        String con = conArr[5] + "-";
        if(mo.equals("Jan"))
            con += "01-";
        else if(mo.equals("Feb"))
            con += "02-";
        else if(mo.equals("Mar"))
            con += "03-";
        else if(mo.equals("Apr"))
            con += "04-";
        else if(mo.equals("May"))
            con += "05-";
        else if(mo.equals("Jun"))
            con += "06-";
        else if(mo.equals("Jul"))
            con += "07-";
        else if(mo.equals("Aug"))
            con += "08-";
        else if(mo.equals("Sep"))
            con += "09-";
        else if(mo.equals("Oct"))
            con += "10-";
        else if(mo.equals("Nov"))
            con += "11-";
        else if(mo.equals("Dec"))
            con += "12-";
        con += conArr[2];
        con += "@BREAK";
        con += con.substring(0,con.indexOf("@BREAK"));
        VideoDate sel = new VideoDate(con);
        serverPHPresponse = phpMain.sendPOSTReadRequest(sel);
        hotStatus.setText("Query successful!");
        hotStatus.setForeground(Color.GREEN);
        //System.out.println(serverPHPresponse[0].printPretty());
        if(serverPHPresponse[0].blank) {
            hotStatus.setText("No video requests were found for the selected day.");
            hotStatus.setForeground(Color.BLACK);
        }
        else {
            reportWind pop = new reportWind(serverPHPresponse);
            pop.toString();
        }
    }
}

And it's triggered by this in another class:

seeSched.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                SchedWind main = new SchedWind();
                main.toString();
            }
        });

The thing is, if I try and get it to open an extremely simple JFrame with nothing in it, it works. Can anyone help?

Thanks!

3
Contributors
18
Replies
19
Views
4 Years
Discussion Span
Last Post by NormR1
0

What is the difference between the JFrame that works and the one that doesn't?

Strange there is no error message for the one that does not work.

0

I got it! It had to do with the fact that I used an external library for the JXDatePicker and that wasn't exporting correctly into the JAR. Derp.

0

I am unsure about this, However I assume that you maybe to some extent using Entities that basically override the Java Runtime Environment default policy.

Try running the JFrame directly with security features.

java -Djava.security.manager Executable

If that works, then we can consider it to be other factors . However this is just a guess.

0

I'll try messing with the security, but this time I correctly packaged the library into the JAR and it still didn't work correctly. If it's any help, I'm trying to package in the SwingX libraries.

0

it still didn't work correctly

Can you explain what it does do? And how that differs from being "correct".

0

It works fine in Eclipse, but when I export it to a normal JAR file and upload it to my website and click the button to create the JFrame popup, nothing happens. No error, no exception, nothing. This happens even after I included the library in the JAR I created. If I don't reference SwingX (the library causing all this trouble) then it works fine.

0

I think I found the issue but I don't know what to do. When I click the button in my applet when it's in the web browser, I actually get this error in the java console:

Exception in thread "AWT-EventQueue-2" java.lang.NoClassDefFoundError: org/jdesktop/swingx/JXDatePicker
    at VideoApplet$1.actionPerformed(VideoApplet.java:44)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$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)
Caused by: java.lang.ClassNotFoundException: org.jdesktop.swingx.JXDatePicker
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 36 more

Edited by Kremlin

0

You need to put the class referenced in the error message on the classpath so the java program can find it.
The archive attribute of the <applet tag can take more than one jar file

0
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry exported="true" kind="lib" path="lib/swingx-all-1.6.3.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

That's the contents of my .classpath file right now, isn't swingx already included?

0

How does what you just posted relate to the applet tag in the html page the browser is reading?

0

It doesn't, I think the problem is that the java console itself can't find the correct class even though the JAR is in the class path. Regardless, here's the HTML code I use on the page containing the applet:

<body>
    <table width=100% height=100%>
    <tr>
    <td style="text-align: center; vertical-align: middle;">
    <object type="application/x-java-applet" height="600" width="800">
    <param name="code" value="VideoApplet" />
    <param name="archive" value="VideoApplet.jar" />
    <param name="archive" value="lib/swingx-all-1.6.3.jar" />
    Applet failed to run.  No Java plug-in was found!
    </object>
    </td>
    </tr>
    </table>
</body>

I tried adding the class but I still get this:

Exception in thread "AWT-EventQueue-2" java.lang.NoClassDefFoundError: org/jdesktop/swingx/JXDatePicke

Edited by Kremlin

0

Part of this project requires valid HTML5, and the applet tag is deprecated. Is there any other way?

0

Same error. In console I get this:

Exception in thread "AWT-EventQueue-4" java.lang.NoClassDefFoundError: org/jdesktop/swingx/JXDatePicker

here's what my HTML file looks like:

<body>
    <table width=100% height=100%>
    <tr>
    <td style="text-align: center; vertical-align: middle;">



    <!--<object type="application/x-java-applet" height="600" width="800">
    <param name="code" value="VideoApplet" />
    <param name="archive" value="VideoApplet.jar" />
    Applet failed to run.  No Java plug-in was found!
    </object>-->



    <applet code="VideoApplet.class" width="800" height="600" archive="VideoApplet.jar", "swingx-all-1.6.3.jar">
    Java applet
    </applet>
    </td>
    </tr>
    </table>
</body>

Both VideoApplet.jar and swingx-all-1.6.3.jar are on my server in the same directory.

0

Try swapping the positions of the jar file references to see if the syntax for the archive attribute is correct.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.