home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / sun / applet / AppletPanel.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  17.0 KB  |  802 lines

  1. package sun.applet;
  2.  
  3. import java.applet.Applet;
  4. import java.applet.AppletStub;
  5. import java.awt.BorderLayout;
  6. import java.awt.Component;
  7. import java.awt.Container;
  8. import java.awt.Dimension;
  9. import java.awt.EventQueue;
  10. import java.awt.Font;
  11. import java.awt.Frame;
  12. import java.awt.Panel;
  13. import java.awt.Toolkit;
  14. import java.awt.Window;
  15. import java.awt.event.InvocationEvent;
  16. import java.io.File;
  17. import java.io.FilePermission;
  18. import java.io.IOException;
  19. import java.io.InputStream;
  20. import java.io.ObjectInputStream;
  21. import java.lang.ref.WeakReference;
  22. import java.lang.reflect.InvocationTargetException;
  23. import java.lang.reflect.Method;
  24. import java.net.SocketPermission;
  25. import java.net.URL;
  26. import java.security.AccessControlContext;
  27. import java.security.AccessControlException;
  28. import java.security.AccessController;
  29. import java.security.CodeSource;
  30. import java.security.Permission;
  31. import java.security.PermissionCollection;
  32. import java.security.Permissions;
  33. import java.security.ProtectionDomain;
  34. import java.security.cert.Certificate;
  35. import java.util.HashMap;
  36. import java.util.Locale;
  37. import java.util.StringTokenizer;
  38. import java.util.Vector;
  39. import javax.swing.SwingUtilities;
  40. import sun.awt.AppContext;
  41. import sun.awt.EmbeddedFrame;
  42. import sun.awt.SunToolkit;
  43. import sun.misc.MessageUtils;
  44. import sun.misc.PerformanceLogger;
  45. import sun.misc.Queue;
  46. import sun.security.util.SecurityConstants;
  47.  
  48. public abstract class AppletPanel extends Panel implements AppletStub, Runnable {
  49.    Applet applet;
  50.    protected boolean doInit = true;
  51.    AppletClassLoader loader;
  52.    public static final int APPLET_DISPOSE = 0;
  53.    public static final int APPLET_LOAD = 1;
  54.    public static final int APPLET_INIT = 2;
  55.    public static final int APPLET_START = 3;
  56.    public static final int APPLET_STOP = 4;
  57.    public static final int APPLET_DESTROY = 5;
  58.    public static final int APPLET_QUIT = 6;
  59.    public static final int APPLET_ERROR = 7;
  60.    public static final int APPLET_RESIZE = 51234;
  61.    public static final int APPLET_LOADING = 51235;
  62.    public static final int APPLET_LOADING_COMPLETED = 51236;
  63.    protected int status;
  64.    Thread handler;
  65.    Dimension defaultAppletSize = new Dimension(10, 10);
  66.    Dimension currentAppletSize = new Dimension(10, 10);
  67.    // $FF: renamed from: mu sun.misc.MessageUtils
  68.    MessageUtils field_0 = new MessageUtils();
  69.    Thread loaderThread = null;
  70.    boolean loadAbortRequest = false;
  71.    private static int threadGroupNumber = 0;
  72.    private AppletListener listeners;
  73.    private Queue queue = null;
  74.    private EventQueue appEvtQ = null;
  75.    private static HashMap classloaders = new HashMap();
  76.    private boolean jdk11Applet = false;
  77.    private boolean jdk12Applet = false;
  78.    private static AppletMessageHandler amh = new AppletMessageHandler("appletpanel");
  79.  
  80.    protected abstract String getCode();
  81.  
  82.    protected abstract String getJarFiles();
  83.  
  84.    protected abstract String getSerializedObject();
  85.  
  86.    public abstract int getWidth();
  87.  
  88.    public abstract int getHeight();
  89.  
  90.    public abstract boolean hasInitialFocus();
  91.  
  92.    protected void setupAppletAppContext() {
  93.    }
  94.  
  95.    synchronized void createAppletThread() {
  96.       String var1 = "applet-" + this.getCode();
  97.       this.loader = this.getClassLoader(this.getCodeBase(), this.getClassLoaderCacheKey());
  98.       this.loader.grab();
  99.       String var2 = this.getParameter("codebase_lookup");
  100.       if (var2 != null && var2.equals("false")) {
  101.          this.loader.setCodebaseLookup(false);
  102.       } else {
  103.          this.loader.setCodebaseLookup(true);
  104.       }
  105.  
  106.       ThreadGroup var3 = this.loader.getThreadGroup();
  107.       this.handler = new Thread(var3, this, "thread " + var1);
  108.       AccessController.doPrivileged(new 1(this));
  109.       this.handler.start();
  110.    }
  111.  
  112.    void joinAppletThread() throws InterruptedException {
  113.       if (this.handler != null) {
  114.          this.handler.join();
  115.          this.handler = null;
  116.       }
  117.  
  118.    }
  119.  
  120.    void release() {
  121.       if (this.loader != null) {
  122.          this.loader.release();
  123.          this.loader = null;
  124.       }
  125.  
  126.    }
  127.  
  128.    public void init() {
  129.       try {
  130.          this.defaultAppletSize.width = this.getWidth();
  131.          this.currentAppletSize.width = this.defaultAppletSize.width;
  132.          this.defaultAppletSize.height = this.getHeight();
  133.          this.currentAppletSize.height = this.defaultAppletSize.height;
  134.       } catch (NumberFormatException var2) {
  135.          this.status = 7;
  136.          this.showAppletStatus("badattribute.exception");
  137.          this.showAppletLog("badattribute.exception");
  138.          this.showAppletException(var2);
  139.       }
  140.  
  141.       this.setLayout(new BorderLayout());
  142.       this.createAppletThread();
  143.    }
  144.  
  145.    public Dimension minimumSize() {
  146.       return new Dimension(this.defaultAppletSize.width, this.defaultAppletSize.height);
  147.    }
  148.  
  149.    public Dimension preferredSize() {
  150.       return new Dimension(this.currentAppletSize.width, this.currentAppletSize.height);
  151.    }
  152.  
  153.    public synchronized void addAppletListener(AppletListener var1) {
  154.       this.listeners = AppletEventMulticaster.add(this.listeners, var1);
  155.    }
  156.  
  157.    public synchronized void removeAppletListener(AppletListener var1) {
  158.       this.listeners = AppletEventMulticaster.remove(this.listeners, var1);
  159.    }
  160.  
  161.    public void dispatchAppletEvent(int var1, Object var2) {
  162.       if (this.listeners != null) {
  163.          AppletEvent var3 = new AppletEvent(this, var1, var2);
  164.          this.listeners.appletStateChanged(var3);
  165.       }
  166.  
  167.    }
  168.  
  169.    public void sendEvent(int var1) {
  170.       synchronized(this) {
  171.          if (this.queue == null) {
  172.             this.queue = new Queue();
  173.          }
  174.  
  175.          Integer var3 = new Integer(var1);
  176.          this.queue.enqueue(var3);
  177.          this.notifyAll();
  178.       }
  179.  
  180.       if (var1 == 6) {
  181.          try {
  182.             this.joinAppletThread();
  183.          } catch (InterruptedException var5) {
  184.          }
  185.  
  186.          if (this.loader == null) {
  187.             this.loader = this.getClassLoader(this.getCodeBase(), this.getClassLoaderCacheKey());
  188.          }
  189.  
  190.          this.release();
  191.       }
  192.  
  193.    }
  194.  
  195.    synchronized AppletEvent getNextEvent() throws InterruptedException {
  196.       while(this.queue == null || this.queue.isEmpty()) {
  197.          this.wait();
  198.       }
  199.  
  200.       Integer var1 = (Integer)this.queue.dequeue();
  201.       return new AppletEvent(this, var1, (Object)null);
  202.    }
  203.  
  204.    boolean emptyEventQueue() {
  205.       return this.queue == null || this.queue.isEmpty();
  206.    }
  207.  
  208.    private void setExceptionStatus(AccessControlException var1) {
  209.       Permission var2 = var1.getPermission();
  210.       if (var2 instanceof RuntimePermission && var2.getName().startsWith("modifyThread")) {
  211.          if (this.loader == null) {
  212.             this.loader = this.getClassLoader(this.getCodeBase(), this.getClassLoaderCacheKey());
  213.          }
  214.  
  215.          this.loader.setExceptionStatus();
  216.       }
  217.  
  218.    }
  219.  
  220.    public void run() {
  221.       Thread var1 = Thread.currentThread();
  222.       if (var1 == this.loaderThread) {
  223.          this.runLoader();
  224.       } else {
  225.          for(boolean var2 = false; !var2 && !var1.isInterrupted(); this.clearLoadAbortRequest()) {
  226.             AppletEvent var3;
  227.             try {
  228.                var3 = this.getNextEvent();
  229.             } catch (InterruptedException var17) {
  230.                this.showAppletStatus("bail");
  231.                return;
  232.             }
  233.  
  234.             try {
  235.                switch (var3.getID()) {
  236.                   case 0:
  237.                      if (this.status != 5 && this.status != 1) {
  238.                         this.showAppletStatus("notdestroyed");
  239.                      } else {
  240.                         this.status = 0;
  241.  
  242.                         try {
  243.                            Applet var21 = this.applet;
  244.                            EventQueue.invokeAndWait(new 5(this, var21));
  245.                         } catch (InterruptedException var7) {
  246.                         } catch (InvocationTargetException var8) {
  247.                         }
  248.  
  249.                         this.applet = null;
  250.                         this.showAppletStatus("disposed");
  251.                         var2 = true;
  252.                      }
  253.                      break;
  254.                   case 1:
  255.                      if (this.okToLoad() && this.loaderThread == null) {
  256.                         this.setLoaderThread(new Thread(this));
  257.                         this.loaderThread.start();
  258.                         this.loaderThread.join();
  259.                         this.setLoaderThread((Thread)null);
  260.                      }
  261.                      break;
  262.                   case 2:
  263.                      if (this.status != 1 && this.status != 5) {
  264.                         this.showAppletStatus("notloaded");
  265.                      } else {
  266.                         this.applet.resize(this.defaultAppletSize);
  267.                         if (this.doInit) {
  268.                            if (PerformanceLogger.loggingEnabled()) {
  269.                               PerformanceLogger.setTime("Applet Init");
  270.                               PerformanceLogger.outputLog();
  271.                            }
  272.  
  273.                            this.applet.init();
  274.                         }
  275.  
  276.                         Font var4 = this.getFont();
  277.                         if (var4 == null || "dialog".equals(var4.getFamily().toLowerCase(Locale.ENGLISH)) && var4.getSize() == 12 && var4.getStyle() == 0) {
  278.                            this.setFont(new Font("Dialog", 0, 12));
  279.                         }
  280.  
  281.                         this.doInit = true;
  282.  
  283.                         try {
  284.                            SwingUtilities.invokeAndWait(new 2(this, this));
  285.                         } catch (InterruptedException var15) {
  286.                         } catch (InvocationTargetException var16) {
  287.                         }
  288.  
  289.                         this.status = 2;
  290.                         this.showAppletStatus("inited");
  291.                      }
  292.                      break;
  293.                   case 3:
  294.                      if (this.status != 2 && this.status != 4) {
  295.                         this.showAppletStatus("notinited");
  296.                      } else {
  297.                         this.applet.resize(this.currentAppletSize);
  298.                         this.applet.start();
  299.  
  300.                         try {
  301.                            Applet var6 = this.applet;
  302.                            SwingUtilities.invokeAndWait(new 3(this, this, var6));
  303.                         } catch (InterruptedException var13) {
  304.                         } catch (InvocationTargetException var14) {
  305.                         }
  306.  
  307.                         this.status = 3;
  308.                         this.showAppletStatus("started");
  309.                      }
  310.                      break;
  311.                   case 4:
  312.                      if (this.status != 3) {
  313.                         this.showAppletStatus("notstarted");
  314.                      } else {
  315.                         this.status = 4;
  316.  
  317.                         try {
  318.                            Applet var5 = this.applet;
  319.                            SwingUtilities.invokeAndWait(new 4(this, var5));
  320.                         } catch (InterruptedException var11) {
  321.                         } catch (InvocationTargetException var12) {
  322.                         }
  323.  
  324.                         try {
  325.                            this.applet.stop();
  326.                         } catch (AccessControlException var10) {
  327.                            this.setExceptionStatus(var10);
  328.                            throw var10;
  329.                         }
  330.  
  331.                         this.showAppletStatus("stopped");
  332.                      }
  333.                      break;
  334.                   case 5:
  335.                      if (this.status != 4 && this.status != 2) {
  336.                         this.showAppletStatus("notstopped");
  337.                      } else {
  338.                         this.status = 5;
  339.  
  340.                         try {
  341.                            this.applet.destroy();
  342.                         } catch (AccessControlException var9) {
  343.                            this.setExceptionStatus(var9);
  344.                            throw var9;
  345.                         }
  346.  
  347.                         this.showAppletStatus("destroyed");
  348.                      }
  349.                      break;
  350.                   case 6:
  351.                      return;
  352.                }
  353.             } catch (Exception var18) {
  354.                this.status = 7;
  355.                if (var18.getMessage() != null) {
  356.                   this.showAppletStatus("exception2", var18.getClass().getName(), var18.getMessage());
  357.                } else {
  358.                   this.showAppletStatus("exception", var18.getClass().getName());
  359.                }
  360.  
  361.                this.showAppletException(var18);
  362.             } catch (ThreadDeath var19) {
  363.                this.showAppletStatus("death");
  364.                return;
  365.             } catch (Error var20) {
  366.                this.status = 7;
  367.                if (var20.getMessage() != null) {
  368.                   this.showAppletStatus("error2", var20.getClass().getName(), var20.getMessage());
  369.                } else {
  370.                   this.showAppletStatus("error", var20.getClass().getName());
  371.                }
  372.  
  373.                this.showAppletException(var20);
  374.             }
  375.          }
  376.  
  377.       }
  378.    }
  379.  
  380.    private Component getMostRecentFocusOwnerForWindow(Window var1) {
  381.       Method var2 = (Method)AccessController.doPrivileged(new 6(this));
  382.       if (var2 != null) {
  383.          try {
  384.             return (Component)var2.invoke((Object)null, var1);
  385.          } catch (Exception var4) {
  386.             var4.printStackTrace();
  387.          }
  388.       }
  389.  
  390.       return var1.getMostRecentFocusOwner();
  391.    }
  392.  
  393.    private void setDefaultFocus() {
  394.       Component var1 = null;
  395.       Container var2 = this.getParent();
  396.       if (var2 != null) {
  397.          if (var2 instanceof Window) {
  398.             var1 = this.getMostRecentFocusOwnerForWindow((Window)var2);
  399.             if (var1 == var2 || var1 == null) {
  400.                var1 = var2.getFocusTraversalPolicy().getInitialComponent((Window)var2);
  401.             }
  402.          } else if (var2.isFocusCycleRoot()) {
  403.             var1 = var2.getFocusTraversalPolicy().getDefaultComponent(var2);
  404.          }
  405.       }
  406.  
  407.       if (var1 != null) {
  408.          if (var2 instanceof EmbeddedFrame) {
  409.             ((EmbeddedFrame)var2).synthesizeWindowActivation(true);
  410.          }
  411.  
  412.          var1.requestFocusInWindow();
  413.       }
  414.  
  415.    }
  416.  
  417.    private void runLoader() {
  418.       if (this.status != 0) {
  419.          this.showAppletStatus("notdisposed");
  420.       } else {
  421.          this.dispatchAppletEvent(51235, (Object)null);
  422.          this.status = 1;
  423.          this.loader = this.getClassLoader(this.getCodeBase(), this.getClassLoaderCacheKey());
  424.          String var1 = this.getCode();
  425.          this.setupAppletAppContext();
  426.  
  427.          label123: {
  428.             try {
  429.                this.loadJarFiles(this.loader);
  430.                this.applet = this.createApplet(this.loader);
  431.                break label123;
  432.             } catch (ClassNotFoundException var11) {
  433.                this.status = 7;
  434.                this.showAppletStatus("notfound", var1);
  435.                this.showAppletLog("notfound", var1);
  436.                this.showAppletException(var11);
  437.             } catch (InstantiationException var12) {
  438.                this.status = 7;
  439.                this.showAppletStatus("nocreate", var1);
  440.                this.showAppletLog("nocreate", var1);
  441.                this.showAppletException(var12);
  442.                return;
  443.             } catch (IllegalAccessException var13) {
  444.                this.status = 7;
  445.                this.showAppletStatus("noconstruct", var1);
  446.                this.showAppletLog("noconstruct", var1);
  447.                this.showAppletException(var13);
  448.                return;
  449.             } catch (Exception var14) {
  450.                this.status = 7;
  451.                this.showAppletStatus("exception", var14.getMessage());
  452.                this.showAppletException(var14);
  453.                return;
  454.             } catch (ThreadDeath var15) {
  455.                this.status = 7;
  456.                this.showAppletStatus("death");
  457.                return;
  458.             } catch (Error var16) {
  459.                this.status = 7;
  460.                this.showAppletStatus("error", var16.getMessage());
  461.                this.showAppletException(var16);
  462.                return;
  463.             } finally {
  464.                this.dispatchAppletEvent(51236, (Object)null);
  465.             }
  466.  
  467.             return;
  468.          }
  469.  
  470.          if (this.applet != null) {
  471.             this.applet.setStub(this);
  472.             this.applet.hide();
  473.             this.add("Center", this.applet);
  474.             this.showAppletStatus("loaded");
  475.             this.validate();
  476.          }
  477.  
  478.       }
  479.    }
  480.  
  481.    protected Applet createApplet(AppletClassLoader var1) throws ClassNotFoundException, IllegalAccessException, IOException, InstantiationException, InterruptedException {
  482.       String var2 = this.getSerializedObject();
  483.       String var3 = this.getCode();
  484.       if (var3 != null && var2 != null) {
  485.          System.err.println(amh.getMessage("runloader.err"));
  486.          throw new InstantiationException("Either \"code\" or \"object\" should be specified, but not both.");
  487.       } else {
  488.          if (var3 == null && var2 == null) {
  489.             String var4 = "nocode";
  490.             this.status = 7;
  491.             this.showAppletStatus(var4);
  492.             this.showAppletLog(var4);
  493.             this.repaint();
  494.          }
  495.  
  496.          if (var3 != null) {
  497.             this.applet = (Applet)var1.loadCode(var3).newInstance();
  498.             this.doInit = true;
  499.          } else {
  500.             InputStream var10 = (InputStream)AccessController.doPrivileged(new 7(this, var1, var2));
  501.             AppletObjectInputStream var5 = new AppletObjectInputStream(var10, var1);
  502.             Object var6 = ((ObjectInputStream)var5).readObject();
  503.             this.applet = (Applet)var6;
  504.             this.doInit = false;
  505.          }
  506.  
  507.          this.findAppletJDKLevel(this.applet);
  508.          if (Thread.interrupted()) {
  509.             try {
  510.                this.status = 0;
  511.                this.applet = null;
  512.                this.showAppletStatus("death");
  513.             } finally {
  514.                Thread.currentThread().interrupt();
  515.             }
  516.  
  517.             return null;
  518.          } else {
  519.             return this.applet;
  520.          }
  521.       }
  522.    }
  523.  
  524.    protected void loadJarFiles(AppletClassLoader var1) throws IOException, InterruptedException {
  525.       String var2 = this.getJarFiles();
  526.       if (var2 != null) {
  527.          StringTokenizer var3 = new StringTokenizer(var2, ",", false);
  528.  
  529.          while(var3.hasMoreTokens()) {
  530.             String var4 = var3.nextToken().trim();
  531.  
  532.             try {
  533.                var1.addJar(var4);
  534.             } catch (IllegalArgumentException var6) {
  535.             }
  536.          }
  537.       }
  538.  
  539.    }
  540.  
  541.    protected synchronized void stopLoading() {
  542.       if (this.loaderThread != null) {
  543.          this.loaderThread.interrupt();
  544.       } else {
  545.          this.setLoadAbortRequest();
  546.       }
  547.  
  548.    }
  549.  
  550.    protected synchronized boolean okToLoad() {
  551.       return !this.loadAbortRequest;
  552.    }
  553.  
  554.    protected synchronized void clearLoadAbortRequest() {
  555.       this.loadAbortRequest = false;
  556.    }
  557.  
  558.    protected synchronized void setLoadAbortRequest() {
  559.       this.loadAbortRequest = true;
  560.    }
  561.  
  562.    private synchronized void setLoaderThread(Thread var1) {
  563.       this.loaderThread = var1;
  564.    }
  565.  
  566.    public boolean isActive() {
  567.       return this.status == 3;
  568.    }
  569.  
  570.    public void appletResize(int var1, int var2) {
  571.       this.currentAppletSize.width = var1;
  572.       this.currentAppletSize.height = var2;
  573.       Dimension var3 = new Dimension(this.currentAppletSize.width, this.currentAppletSize.height);
  574.       if (this.loader != null) {
  575.          AppContext var4 = this.loader.getAppContext();
  576.          if (var4 != null) {
  577.             this.appEvtQ = (EventQueue)var4.get(AppContext.EVENT_QUEUE_KEY);
  578.          }
  579.       }
  580.  
  581.       if (this.appEvtQ != null) {
  582.          this.appEvtQ.postEvent(new InvocationEvent(Toolkit.getDefaultToolkit(), new 8(this, this, var3)));
  583.       }
  584.  
  585.    }
  586.  
  587.    public void setBounds(int var1, int var2, int var3, int var4) {
  588.       super.setBounds(var1, var2, var3, var4);
  589.       this.currentAppletSize.width = var3;
  590.       this.currentAppletSize.height = var4;
  591.    }
  592.  
  593.    public Applet getApplet() {
  594.       return this.applet;
  595.    }
  596.  
  597.    protected void showAppletStatus(String var1) {
  598.       this.getAppletContext().showStatus(amh.getMessage(var1));
  599.    }
  600.  
  601.    protected void showAppletStatus(String var1, Object var2) {
  602.       this.getAppletContext().showStatus(amh.getMessage(var1, var2));
  603.    }
  604.  
  605.    protected void showAppletStatus(String var1, Object var2, Object var3) {
  606.       this.getAppletContext().showStatus(amh.getMessage(var1, var2, var3));
  607.    }
  608.  
  609.    protected void showAppletLog(String var1) {
  610.       System.out.println(amh.getMessage(var1));
  611.    }
  612.  
  613.    protected void showAppletLog(String var1, Object var2) {
  614.       System.out.println(amh.getMessage(var1, var2));
  615.    }
  616.  
  617.    protected void showAppletException(Throwable var1) {
  618.       var1.printStackTrace();
  619.       this.repaint();
  620.    }
  621.  
  622.    public String getClassLoaderCacheKey() {
  623.       return this.getCodeBase().toString();
  624.    }
  625.  
  626.    public static synchronized void flushClassLoader(String var0) {
  627.       classloaders.remove(var0);
  628.    }
  629.  
  630.    public static synchronized void flushClassLoaders() {
  631.       classloaders = new HashMap();
  632.    }
  633.  
  634.    protected AppletClassLoader createClassLoader(URL var1) {
  635.       return new AppletClassLoader(var1);
  636.    }
  637.  
  638.    synchronized AppletClassLoader getClassLoader(URL var1, String var2) {
  639.       AppletClassLoader var3 = (AppletClassLoader)classloaders.get(var2);
  640.       if (var3 == null) {
  641.          AccessControlContext var4 = this.getAccessControlContext(var1);
  642.          var3 = (AppletClassLoader)AccessController.doPrivileged(new 9(this, var1, var2), var4);
  643.       }
  644.  
  645.       return var3;
  646.    }
  647.  
  648.    private AccessControlContext getAccessControlContext(URL var1) {
  649.       Object var2 = (PermissionCollection)AccessController.doPrivileged(new 10(this));
  650.       if (var2 == null) {
  651.          var2 = new Permissions();
  652.       }
  653.  
  654.       ((PermissionCollection)var2).add(SecurityConstants.CREATE_CLASSLOADER_PERMISSION);
  655.  
  656.       Permission var3;
  657.       try {
  658.          var3 = var1.openConnection().getPermission();
  659.       } catch (IOException var6) {
  660.          var3 = null;
  661.       }
  662.  
  663.       if (var3 instanceof FilePermission) {
  664.          String var4 = var3.getName();
  665.          int var5 = var4.lastIndexOf(File.separatorChar);
  666.          ((PermissionCollection)var2).add(var3);
  667.          if (var5 != -1) {
  668.             var4 = var4.substring(0, var5 + 1);
  669.             if (var4.endsWith(File.separator)) {
  670.                var4 = var4 + "-";
  671.             }
  672.  
  673.             ((PermissionCollection)var2).add(new FilePermission(var4, "read"));
  674.          }
  675.       } else {
  676.          String var8 = var1.getHost();
  677.          if (var8 == null) {
  678.             var8 = "localhost";
  679.          }
  680.  
  681.          ((PermissionCollection)var2).add(new SocketPermission(var8, "connect,accept"));
  682.          if (var3 != null) {
  683.             ((PermissionCollection)var2).add(var3);
  684.          }
  685.       }
  686.  
  687.       ProtectionDomain var9 = new ProtectionDomain(new CodeSource(var1, (Certificate[])null), (PermissionCollection)var2);
  688.       AccessControlContext var10 = new AccessControlContext(new ProtectionDomain[]{var9});
  689.       return var10;
  690.    }
  691.  
  692.    public Thread getAppletHandlerThread() {
  693.       return this.handler;
  694.    }
  695.  
  696.    public int getAppletWidth() {
  697.       return this.currentAppletSize.width;
  698.    }
  699.  
  700.    public int getAppletHeight() {
  701.       return this.currentAppletSize.height;
  702.    }
  703.  
  704.    public static void changeFrameAppContext(Frame var0, AppContext var1) {
  705.       AppContext var2 = SunToolkit.targetToAppContext(var0);
  706.       if (var2 != var1) {
  707.          synchronized(Window.class) {
  708.             WeakReference var4 = null;
  709.             Vector var5 = (Vector)var2.get(Window.class);
  710.             if (var5 != null) {
  711.                for(WeakReference var7 : var5) {
  712.                   if (var7.get() == var0) {
  713.                      var4 = var7;
  714.                      break;
  715.                   }
  716.                }
  717.  
  718.                if (var4 != null) {
  719.                   var5.remove(var4);
  720.                }
  721.             }
  722.  
  723.             SunToolkit.insertTargetMapping(var0, var1);
  724.             var5 = (Vector)var1.get(Window.class);
  725.             if (var5 == null) {
  726.                var5 = new Vector();
  727.                var1.put(Window.class, var5);
  728.             }
  729.  
  730.             var5.add(var4);
  731.          }
  732.       }
  733.    }
  734.  
  735.    private void findAppletJDKLevel(Applet var1) {
  736.       Class var2 = var1.getClass();
  737.       synchronized(var2) {
  738.          Boolean var4 = this.loader.isJDK11Target(var2);
  739.          Boolean var5 = this.loader.isJDK12Target(var2);
  740.          if (var4 == null && var5 == null) {
  741.             String var6 = var2.getName();
  742.             var6 = var6.replace('.', '/');
  743.             String var7 = var6 + ".class";
  744.             Object var8 = null;
  745.             byte[] var9 = new byte[8];
  746.  
  747.             try {
  748.                InputStream var15 = (InputStream)AccessController.doPrivileged(new 11(this, var7));
  749.                int var10 = var15.read(var9, 0, 8);
  750.                var15.close();
  751.                if (var10 != 8) {
  752.                   return;
  753.                }
  754.             } catch (IOException var12) {
  755.                return;
  756.             }
  757.  
  758.             int var16 = this.readShort(var9, 6);
  759.             if (var16 < 46) {
  760.                this.jdk11Applet = true;
  761.             } else if (var16 == 46) {
  762.                this.jdk12Applet = true;
  763.             }
  764.  
  765.             this.loader.setJDK11Target(var2, this.jdk11Applet);
  766.             this.loader.setJDK12Target(var2, this.jdk12Applet);
  767.          } else {
  768.             this.jdk11Applet = var4 == null ? false : var4;
  769.             this.jdk12Applet = var5 == null ? false : var5;
  770.          }
  771.       }
  772.    }
  773.  
  774.    protected boolean isJDK11Applet() {
  775.       return this.jdk11Applet;
  776.    }
  777.  
  778.    protected boolean isJDK12Applet() {
  779.       return this.jdk12Applet;
  780.    }
  781.  
  782.    private int readShort(byte[] var1, int var2) {
  783.       int var3 = this.readByte(var1[var2]);
  784.       int var4 = this.readByte(var1[var2 + 1]);
  785.       return var3 << 8 | var4;
  786.    }
  787.  
  788.    private int readByte(byte var1) {
  789.       return var1 & 255;
  790.    }
  791.  
  792.    // $FF: synthetic method
  793.    static void access$000(AppletPanel var0) {
  794.       var0.setDefaultFocus();
  795.    }
  796.  
  797.    // $FF: synthetic method
  798.    static HashMap access$100() {
  799.       return classloaders;
  800.    }
  801. }
  802.