Witam
czy da się sprawdzić z poziomu php lub podczas startu apletu czy jego kopia nie została już uruchomiona?
Witam
czy da się sprawdzić z poziomu php lub podczas startu apletu czy jego kopia nie została już uruchomiona?
Co to znaczy "jest uruchomiona"?
dodaj do apletu pole
private static int ile=0;
w metodzie init() daj ile++; a w metodzie destroy() daj ile--;
Sprawdzałem tylko na Operze, ten sposób nie rozróżnia apletów otwartych na różnych kartach. różnych oknach i na tej samej karcie.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Test63_IleAppletow extends JApplet{
public JFrame okno;
public JButton button;
private static int ileAppletow=0;
@Override public void start(){
if (ileAppletow >= 2) {
this.destroy();
} else {
System.out.println("start");
okno = new JFrame();
button = new JButton();
okno.setLayout(null); okno.setBounds(5, 5, 320, 240); okno.setVisible(true);
this.setLayout(null);
okno.add(button); button.setBounds(20, 20, 200, 20); button.setVisible(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
button.setText(" ile = "+ileAppletow);
}
});
}
}
public void init(){
ileAppletow++;
System.out.println("okno ile="+ileAppletow);
}
public void destroy(){
ileAppletow--;
System.out.println("okno ile="+ileAppletow);
okno.dispose();
}
}
dzieki
jeszcze dwa drobne pytania:
Może jakoś tak:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JFrame;
public class Test extends JApplet
{
public JFrame okno;
public JButton button;
private static int ileAppletow=0;
private boolean first=true;
public void start()
{
if(first)
{
button = new JButton();
okno = new JFrame();
okno.setLayout(null);
okno.setBounds(5, 5, 320, 240);
okno.setVisible(true);
this.setLayout(null);
okno.add(button); button.setBounds(20, 20, 200, 20);
button.setVisible(true);
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
button.setText(" ile = "+ileAppletow);
}
});
}
}
public void init()
{
ileAppletow++;
if(ileAppletow>1)
{
first=false;
add(new JLabel("<html>Ten aplet jest juz uruchomiony <br> w innej karcie (w innym oknie)</html>"));
}
System.out.println("okno ile="+ileAppletow);
}
public void destroy()
{
ileAppletow--;
System.out.println("okno ile="+ileAppletow);
okno.dispose();
}
}
Imo, bardzo nienaturalne jest tworzenie w aplecie ramek (JFrame), komponenty powinieneś umieścić na obszarze apletu, np. tak:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.FlowLayout;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JFrame;
public class Test extends JApplet
{
public JButton button;
private static int ileAppletow=0;
public void init()
{
ileAppletow++;
if(ileAppletow>1)
{
setLayout(new FlowLayout(FlowLayout.CENTER));
add(new JLabel("<html>Ten aplet jest juz uruchomiony <br> w innej karcie (w innym oknie)</html>"));
}
else
{
button = new JButton();
button.setBounds(20, 20, 200, 20);
setLayout(null);
add(button);
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
button.setText(" ile = "+ileAppletow);
}
});
}
}
public void destroy()
{
ileAppletow--;
}
}
Pamiętaj, że aplet jest elementem strony. Czasem jedynym elementem, ale nie jest to żadna reguła. Zmiany rozmiaru apletu i wszelkie podobne zmiany mogą więc wpłynąć negatywnie na efekt jaki może chcieć osiągnąć webmaster osadzając aplet na stronie. Jedynym uzasadnionym powodem wiedzy apletu o innych apletach (lub instancjach jego samego) jest uzyskanie interaktywności między nimi. Na przykład wyświetlanie określonej zawartości w zależności od wyboru użytkownika dokonanego w innym aplecie. Uzasadnieniem wiedzy o innych egzemplarzach apletu może być uniknięcie przeprowadzania czasochłonnych obliczeń jeżeli takie same zostały już wcześniej przeprowadzone w innym egzemplarzu (lub oczekiwanie na przeliczenie ich w egzemplarzu, który zaczął je najwcześniej i późniejsze pobranie wyników).