Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Пролема отображения апплета в IE8


Автор: Cross 23.4.2009, 10:20
Здравствуйте! 
У меня есть апплет, рисующий график функции. И есть HTML-страничка, созданная с помощью вкладок.
Т.е. апплет появляется не везде на странице, а только на одной из вкладок. 
В Мозилле все работает на УРА!  smile 
Но вот в Эксплорере - проблема. 
Когда из вкладки с апплетом перехожу на другую вкладку, рисунок, создаваемый апплетом не сразу исчезает.
А если исчез - то насовсем. Т.е. когда я возвращаюсь на вкладку с апплетом - он не отображается.

На всякий случай привожу код апплета:
Код

import java.applet.*;
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Vector;
import java.util.List;
import javax.swing.*;


import netscape.javascript.JSObject;

public class mitraGraphicClass extends Applet implements ActionListener{
    TextArea txtArea;
    JSObject win;
    
    Float[] test;
    Integer[] id;
    ArrayList li = new ArrayList();
       int MNOZH = 20;
       Float END = new Float(10.0);
       Float START = new Float(0.5);
       Float SHAG = new Float(0.1);
       /*int START = 5;
       int END = 40;
       int SHAG = 1;*/
       Color bgColor;
       static Float c1;
       static Float c2;
       static Float r1;
       static Float r2;
       static Integer mitra;
      static Vector<Double> data;
      Double min = 0.0;



    public void start() {
        
        Button b = new Button("Построить график функции");
        b.addActionListener(this);
        add(b);
        c1 = new Float(2.92); 
        c2 = new Float(-1.46);
        r1 = new Float(2.2);
        r2 = new Float(1.26);
        int m = 1; 
        data = setFunction(START, END, SHAG, MNOZH, c1,c2,r1,r2,m);
        min = minValue(data);
        System.out.println(min);
    }
    
    public void actionPerformed(ActionEvent e){
        win = JSObject.getWindow(this);
        test = (Float[]) win.call("test", null);
        c1 = test[0]; 
        c2 = test[2];
        r1 = test[1];
        r2 = test[3];
        mitra = (Integer) win.call("getMitra",null);
        
        data = setFunction(START, END, SHAG, MNOZH, c1,c2,r1,r2,mitra);
        min = minValue(data);

        repaint();
        
    }
    
    public void stop() {
        
    }
    
    public void destroy() {
        
    }
    
    public void paint(Graphics g) {
        
        //bgColor = new Color(192,192,192);
        //   setBackground(bgColor);
           
               g.setColor(Color.black);
               //g.setFont(Font.SANS_SERIF);
               g.drawLine(50, 0, 50, 200);
               g.drawLine(50, 0, 55, 5);
               g.drawLine(50, 0, 45, 5);
               g.drawLine(0, 100, 300, 100);
               g.drawLine(300, 100, 295, 95);
               g.drawLine(300, 100, 295, 105);
               int setNullX = 50;
               int setNullY = 100;
               int startPoint = setNullX;
               
               // рисование осей
               for(int i=0;i<200;i=i+20) {
                g.drawLine(setNullX+i, setNullY+2, setNullX+i, setNullY-2);
                Float xval = new Float(i/MNOZH);
                String xvalue = toString().valueOf(xval).substring(0, 1);
                g.drawString(xvalue, setNullX+i, setNullY+14);
               }
               
               for(int j=20;j<100;j=j+20) {
                g.drawLine(setNullX+2, setNullY+j, setNullX-2, setNullY+j);
                g.drawLine(setNullX+2, setNullY-j, setNullX-2, setNullY-j);
                Float yval = new Float(j/MNOZH);
                String yvalue = toString().valueOf(-yval).substring(0, 2);
                g.drawString(yvalue, setNullX-14, setNullY+j);
                yvalue = toString().valueOf(yval).substring(0, 1);
                g.drawString(yvalue, setNullX-14, setNullY-j);
               }
               
               Float st = (START - SHAG)*MNOZH;
               Float fy = new Float(0.0);
               g.setColor(Color.red);
               int sh = 100;
               for (int fx=0; fx<=data.size()-2; fx++) {
                st = st + SHAG*MNOZH;
                int fx1 = (setNullX + st.intValue());
                fy = new Float(data.get(fx)*MNOZH);
                   int fy1 = (setNullY - fy.intValue());
                   int fx2 = (setNullX + st.intValue() + 1);
                   fy = new Float(data.get(fx+1)*MNOZH);
                   int fy2 = (setNullY - fy.intValue());
                   g.drawLine(fx1, fy1, fx2, fy2);
           }
               
               g.drawString("Максимальная глубина ямы:" + min, 10, 200+30);
               
    }
    

    private Vector<Double> setFunction(Float left_max, Float count, Float shag, int m, Float c1, Float c2, Float r1, Float r2, int Mitra) {
        Vector<Double> function = new Vector<Double>();
        Float mitraFloat = new Float(Mitra);
        System.out.println(mitraFloat);
        for (Float x=left_max; x<=count; x=x+shag) {
            Double f = (((((c1*c2*1.6*1.6))/(1.1*x))*(1.0+1.0/(mitraFloat + 1)*sign(c1,c2)*(Math.pow((r1+r2)/x,Mitra)))));
            function.add(f);
        }
        System.out.println(function);
        return function;
    }
    
    private int sign(Float c1, Float c2) {
        int x = 1;
        if ((c1 > 0) && (c2 > 0)) x = 1;
        else if ((c1 < 0) && (c2 < 0)) x = 1;
        else if ((c1 < 0) && (c2 > 0)) x = -1;
        else if ((c1 > 0) && (c2 < 0)) x = -1;
    return x;
    }
    
    private Double minValue(Vector<Double> data) {
        Double temp = null;
        int dataLength = data.size();
        Double max = data.get(0);
        for (int i=1;i<dataLength;i++) {
                if (data.get(i) < max) {
                    temp = data.get(i);
                    data.set(i, max);
                    max = temp;
    
                }
        }
        return max;
        
    }
}


Автор: Keyo 24.4.2009, 15:33
откройте java-консоль в панели управления и посмотрите... Может какие-то исключения вываливаются. Возможно какие-то проблемы с JSObject, апплет подписан? Код вставки на страницу покажите

Хотя гоню, подписывать ни к чему... Разве что прописать mayscript...

Автор: Cross 24.4.2009, 16:34
Вот код вставки апплета:

Код

<applet  
    code="mitraGraphicClass.class" 
        archive="myTest.jar" 
        width = "600" 
        height = "300" 
        name="mitraGraphicClass">
</applet>


причем проблема оказалась только с IE 8.0. Когда я выставила в параметрах браузера соответствие 7 версии,
то все работает отлично. 

Короче, работает только в IE 7.0 !



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)