Problème de destruction dynamique d'Applet - Java - Programmation
MarshPosté le 12-06-2007 à 21:58:39
Bonjour,
Je crée dynamiquement un applet en javascript dans un élément "DIV" créé aussi dynamiquement et qui est ajouté aux éléments de "BODY" (Cf. code Javascript ci-dessous qui est écrit pour Firefox Mozilla).
Mon code Java se trouve dans le jar "applet.jar" et il est détaillé plus loin ci-dessous. Mon applet est composé d'éléments SWING.
Quand je clique sur le bouton "close" de mon applet, la fonction Java "closeApplication" appelle "stop()" qui enregistre les paramètres sélectionnés et fait appel à la fonction Javascript "closeApplet", qui elle, récupère le tableau transmis par Java puis détruit l'élément HTML "DIV" qui contenait l'applet.
Mon problème est le suivant :
J'aimerais détruire mon applet Java à partir de mon code Java après avoir appelé la fonction "closeApplet" de Javascript. J'ai essayé plusieurs méthodes mais je crois que quand Java appelle la fonction "closeApplet", il ne fait pas la suite de la méthode Java et il réinitialise l'applet, mais comme le conteneur HTML "DIV" n'existe plus, tout plante au bout de quelques secondes.
Rq : La fonction "destroy" de JApplet, placé après la fonction call, ne marche pas.
Est-ce que vous savez résoudre ce problème ?
Merci beaucoup par avance, Eva
CODE JAVASCRIPT :
function getListByString(){
var div=document.createElement("div" ); div.setAttribute("id","divapplet" ); div.setAttribute("style","position:absolute; top:130; left:300;" );
tmTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); tmTableModel = new TableModelFilter(tmTable.getModel(),MyAppletManager.gettmListApplet(),tmFilter);
Marsh Posté le 12-06-2007 à 21:58:39
Bonjour,
Je crée dynamiquement un applet en javascript dans un élément "DIV" créé aussi dynamiquement et qui est ajouté aux éléments de "BODY" (Cf. code Javascript ci-dessous qui est écrit pour Firefox Mozilla).
Mon code Java se trouve dans le jar "applet.jar" et il est détaillé plus loin ci-dessous. Mon applet est composé d'éléments SWING.
Quand je clique sur le bouton "close" de mon applet, la fonction Java "closeApplication" appelle "stop()" qui enregistre les paramètres sélectionnés et fait appel à la fonction Javascript "closeApplet", qui elle, récupère le tableau transmis par Java puis détruit l'élément HTML "DIV" qui contenait l'applet.
Mon problème est le suivant :
J'aimerais détruire mon applet Java à partir de mon code Java après avoir appelé la fonction "closeApplet" de Javascript. J'ai essayé plusieurs méthodes mais je crois que quand Java appelle la fonction "closeApplet", il ne fait pas la suite de la méthode Java et il réinitialise l'applet, mais comme le conteneur HTML "DIV" n'existe plus, tout plante au bout de quelques secondes.
Rq : La fonction "destroy" de JApplet, placé après la fonction call, ne marche pas.
Est-ce que vous savez résoudre ce problème ?
Merci beaucoup par avance,
Eva
CODE JAVASCRIPT :
function getListByString(){
var div=document.createElement("div" );
div.setAttribute("id","divapplet" );
div.setAttribute("style","position:absolute; top:130; left:300;" );
var applet=document.createElement("embed" );
applet.setAttribute("code","payloadtm.DataAppletPicker.class" );
applet.setAttribute("archive","applet.jar,plugin.jar" );
applet.setAttribute("type","application/x-java-applet;version=1.3" );
applet.setAttribute("name","myApplet" );
applet.setAttribute("id","myAppletid" );
applet.setAttribute("width","500" );
applet.setAttribute("height","450" );
applet.setAttribute("codebase","." );
applet.setAttribute("mayscript","true" );
applet.setAttribute("tonName",TonName);
dojo.byId("bodyid" ).appendChild(div);
dojo.byId("divapplet" ).appendChild(applet);
}
function closeApplet (tabPara){
//Récupération des éléments de tabPara => TODO
dojo.byId("divapplet" ).innerHTML="";
}
CODE JAVA :
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import netscape.javascript.*;
import java.net.*;
public class DataAppletPicker extends JApplet{
protected JPanel buttonPanel = new JPanel();
private JPanel jPanel1 = new JPanel();
protected JPanel inputPanel = new JPanel();
private BorderLayout borderLayout1 = new BorderLayout();
protected JPanel messagePanel = new JPanel();
private BorderLayout borderLayout2 = new BorderLayout();
private JScrollPane tmListScrollPane = new JScrollPane();
private JLabel messageLabel = new JLabel();
private JButton addButton = new JButton();
private JButton closeButton = new JButton();
private JPanel filterPanel = new JPanel();
private JLabel filterLabel = new JLabel();
private JTextField tmFilter = new JTextField(20);
private JTable tmTable = new JTable();
private String tmSelected = null;
private TMESTableModelFilter tmTableModel;
private Vector collection_ = new Vector();
URL urlProperties;
String TonName;
String fileParameters="";
String propertiesFileName = "data/param.properties";
URL urlParameterList;
JSObject win;
public void init() {
tonName=getParameter("TonName" );
win = JSObject.getWindow(this);
try {
urlProperties = new URL(getCodeBase(), propertiesFileName);
urlParameterList = new URL(getCodeBase(), "data/PARAM-" + tonName
+ ".txt" );
try {
MyAppletManager.loadPropertiesFile(tonName,urlProperties,urlParameterList);
} catch (Exception e) {System.out.println(e);}
}
catch(Exception e) {
e.printStackTrace();
}
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
messageLabel.setText(tonName + " PARAM List : " );
}
private void jbInit() throws Exception {
Container mainPane = this.getContentPane();
jPanel1.setLayout(borderLayout1);
inputPanel.setLayout(borderLayout2);
mainPane.setLayout(new BorderLayout());
mainPane.add(buttonPanel, BorderLayout.SOUTH);
mainPane.add(jPanel1, BorderLayout.CENTER);
JPanel topPanel = new JPanel(new BorderLayout());
topPanel.add(messagePanel, BorderLayout.CENTER);
jPanel1.add(inputPanel, BorderLayout.CENTER);
jPanel1.add(topPanel, BorderLayout.NORTH);
addButton.setText("Add PARAM" );
addButton.addActionListener(new java.awt.event.ActionListener()
{
public void actionPerformed(ActionEvent e) {
addButton_actionPerformed(e);
}
});
closeButton.setText("Close" );
closeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
closeButton_actionPerformed(e);
}
});
tmTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tmTableModel = new
TableModelFilter(tmTable.getModel(),MyAppletManager.gettmListApplet(),tmFilter);
tmTable.setModel(tmTableModel);
tmListScrollPane.getViewport().add(tmTable, null);
inputPanel.add(tmListScrollPane, BorderLayout.CENTER);
messagePanel.setLayout(new BorderLayout());
messagePanel.add(filterPanel, BorderLayout.NORTH);
messagePanel.add(messageLabel, BorderLayout.WEST);
buttonPanel.add(addButton);
buttonPanel.add(closeButton);
}
void addButton_actionPerformed(ActionEvent e) {
//TO DO
}
void closeButton_actionPerformed(ActionEvent e) {
closeApplication();
}
protected void closeApplication() {
//dispose();
//setVisible(false);
stop();
}
public void stop() {
if (collection_.size()!=0) {
String paramCollect []= new String[getCollection().size()];
paramCollect[0] = (getCollection()).toString();
win.call("closeApplet",paramCollect);
}
else {
String paramCollect []= new String[1];
paramCollect[0]="empty";
win.call("closeApplet",paramCollect);
}
}
public Vector getCollection() {
return collection_;
}
public void start() {
show();
}
public void destroy(){
}
}