五千年(敝帚自珍)

主题:【请教】如何下在Applet插件 -- 大明湖

共:💬5
分页树展主题 · 全看首页 上页
/ 1
下页 末页
  • 家园 【请教】如何下在Applet插件

    有时候看到好的Applet,想保存,但不知如何做。请教!

    • 家园 可能很容易,也可能挺麻烦!

      如果Applet所有的东西都打包成JAR file了,那么你按照URL就可以直接下载整个JAR File.(View source, 看含有Applet的HTML file的原文件,就可以找到Applet的URL)。

      如果给出的只是一个Entry Class,其他所有文件是Load-on-demand,那么你就不能“一窝端”,可能要多试几次才能下载所有的Class和Resources。这种发布方式应该是比较“业余的”,不常见,因为具体运行性能会很差。

      下载到的Class文件可以反编译成Source code,你可以看到所有的秘密!

      下载的Class可以嵌在html page里用浏览器看,也可以用AppletViewer来看。甚至可以改改code,让它成为一个普通的program.

      如果你了解Java,很容易,否则可能会有些麻烦!

      • 家园 看来是不容易了,多谢

        依此为例,能给说的更详细点吗?

        http://www.njagyouth.org/liberty.htm

        • 家园 Applet的Entry Class名字叫jhanabi.class

          URL是外链出处

          将其下载反编译后源程序为:

          import java.applet.Applet;
          import java.applet.AudioClip;
          import java.awt.*;
          import java.awt.image.MemoryImageSource;
          import java.util.Random;
          
          public class jhanabi extends Applet implements Runnable
          {
          
              public jhanabi()
              {
                  m_mouseX = 0;
                  m_mouseY = 0;
                  m_sleepTime = 5;
                  isError = false;
                  isInitialized = false;
                  rand = new Random();
                  bits = 10000;
                  bit_px = new double[bits];
                  bit_py = new double[bits];
                  bit_vx = new double[bits];
                  bit_vy = new double[bits];
                  bit_sx = new int[bits];
                  bit_sy = new int[bits];
                  bit_l = new int[bits];
                  bit_f = new int[bits];
                  bit_p = new int[bits];
                  bit_c = new int[bits];
                  ru = 50;
                  rv = 50;
              }
          
              public void init()
              {
                  String s = getParameter("para_bits");
                  if(s != null)
                      bits = Integer.parseInt(s);
                  s = getParameter("para_max");
                  if(s != null)
                      bit_max = Integer.parseInt(s);
                  s = getParameter("para_blendx");
                  if(s != null)
                      ru = Integer.parseInt(s);
                  s = getParameter("para_blendy");
                  if(s != null)
                      rv = Integer.parseInt(s);
                  s = getParameter("para_sound");
                  if(s != null)
                      bit_sound = Integer.parseInt(s);
                  m_nAppX = size().width;
                  m_nAppY = size().height;
                  m_centerX = m_nAppX / 2;
                  m_centerY = m_nAppY / 2;
                  m_mouseX = m_centerX;
                  m_mouseY = m_centerY;
                  resize(m_nAppX, m_nAppY);
                  pixls = m_nAppX * m_nAppY;
                  pixls2 = pixls - m_nAppX * 2;
                  pix0 = new int[pixls];
                  offImage = new MemoryImageSource(m_nAppX, m_nAppY, pix0, 0, m_nAppX);
                  offImage.setAnimated(true);
                  dbImg = createImage(offImage);
                  for(int i = 0; i < pixls; i++)
                      pix0[i] = 0xff000000;
          
                  sound1 = getAudioClip(getDocumentBase(), "firework.au");
                  sound2 = getAudioClip(getDocumentBase(), "syu.au");
                  for(int j = 0; j < bits; j++)
                      bit_f[j] = 0;
          
                  isInitialized = true;
                  start();
              }
          
              public void run()
              {
                  while(!isInitialized) 
                      try
                      {
                          Thread.sleep(200L);
                      }
                      catch(InterruptedException interruptedexception) { }
                  do
                  {
                      for(int j = 0; j < pixls2; j++)
                      {
                          int k = pix0[j];
                          int l = pix0[j + 1];
                          int i1 = pix0[j + m_nAppX];
                          int j1 = pix0[j + m_nAppX + 1];
                          int i = (k & 0xff0000) >> 16;
                          int k1 = ((((l & 0xff0000) >> 16) - i) * ru >> 8) + i;
                          i = (k & 0xff00) >> 8;
                          int l1 = ((((l & 0xff00) >> 8) - i) * ru >> 8) + i;
                          i = k & 0xff;
                          int i2 = (((l & 0xff) - i) * ru >> 8) + i;
                          i = (i1 & 0xff0000) >> 16;
                          int j2 = ((((j1 & 0xff0000) >> 16) - i) * ru >> 8) + i;
                          i = (i1 & 0xff00) >> 8;
                          int k2 = ((((j1 & 0xff00) >> 8) - i) * ru >> 8) + i;
                          i = i1 & 0xff;
                          int l2 = (((j1 & 0xff) - i) * ru >> 8) + i;
                          int i3 = ((j2 - k1) * rv >> 8) + k1;
                          int j3 = ((k2 - l1) * rv >> 8) + l1;
                          int k3 = ((l2 - i2) * rv >> 8) + i2;
                          pix0[j] = i3 << 16 | j3 << 8 | k3 | 0xff000000;
                      }
          
                      rend();
                      offImage.newPixels(0, 0, m_nAppX, m_nAppY);
                      try
                      {
                          Thread.sleep(m_sleepTime);
                      }
                      catch(InterruptedException interruptedexception1) { }
                  } while(true);
              }
          
              public void update(Graphics g)
              {
                  paint(g);
              }
          
              public void paint(Graphics g)
              {
                  g.drawImage(dbImg, 0, 0, this);
              }
          
              public void start()
              {
                  if(isError)
                      return;
                  isRunning = true;
                  if(runner == null)
                  {
                      runner = new Thread(this);
                      runner.start();
                  }
              }
          
              public void stop()
              {
                  if(runner != null)
                  {
                      runner.stop();
                      runner = null;
                  }
              }
          
              public boolean mouseMove(Event event, int i, int j)
              {
                  m_mouseX = i;
                  m_mouseY = j;
                  return true;
              }
          
              public boolean mouseDown(Event event, int i, int j)
              {
                  m_mouseX = i;
                  m_mouseY = j;
                  int k = (int)(rand.nextDouble() * 256D);
                  int l = (int)(rand.nextDouble() * 256D);
                  int i1 = (int)(rand.nextDouble() * 256D);
                  int j1 = k << 16 | l << 8 | i1 | 0xff000000;
                  int k1 = 0;
                  for(int l1 = 0; l1 < bits; l1++)
                  {
                      if(bit_f[l1] != 0)
                          continue;
                      bit_px[l1] = m_mouseX;
                      bit_py[l1] = m_mouseY;
                      double d = rand.nextDouble() * 6.2800000000000002D;
                      double d1 = rand.nextDouble();
                      bit_vx[l1] = Math.sin(d) * d1;
                      bit_vy[l1] = Math.cos(d) * d1;
                      bit_l[l1] = (int)(rand.nextDouble() * 100D) + 100;
                      bit_p[l1] = (int)(rand.nextDouble() * 3D);
                      bit_c[l1] = j1;
                      bit_sx[l1] = m_mouseX;
                      bit_sy[l1] = m_nAppY - 5;
                      bit_f[l1] = 2;
                      if(++k1 == bit_max)
                          break;
                  }
          
                  if(bit_sound > 1)
                      sound2.play();
                  return true;
              }
          
              public boolean mouseExit(Event event, int i, int j)
              {
                  m_mouseX = i;
                  m_mouseY = j;
                  return true;
              }
          
              void rend()
              {
                  boolean flag = false;
                  boolean flag1 = false;
                  boolean flag2 = false;
                  for(int k = 0; k < bits; k++)
                      switch(bit_f[k])
                      {
                      default:
                          break;
          
                      case 1: // '\001'
                          bit_vy[k] += rand.nextDouble() / 50D;
                          bit_px[k] += bit_vx[k];
                          bit_py[k] += bit_vy[k];
                          bit_l[k]--;
                          if(bit_l[k] == 0 || bit_px[k] < 0.0D || bit_py[k] < 0.0D || bit_px[k] > (double)m_nAppX || bit_py[k] > (double)(m_nAppY - 3))
                          {
                              bit_c[k] = 0xff000000;
                              bit_f[k] = 0;
                          } else
                          if(bit_p[k] == 0)
                          {
                              if((int)(rand.nextDouble() * 2D) == 0)
                                  bit_set((int)bit_px[k], (int)bit_py[k], -1);
                          } else
                          {
                              bit_set((int)bit_px[k], (int)bit_py[k], bit_c[k]);
                          }
                          break;
          
                      case 2: // '\002'
                          bit_sy[k] -= 5;
                          if((double)bit_sy[k] <= bit_py[k])
                          {
                              bit_f[k] = 1;
                              flag2 = true;
                          }
                          if((int)(rand.nextDouble() * 20D) == 0)
                          {
                              int i = (int)(rand.nextDouble() * 2D);
                              int j = (int)(rand.nextDouble() * 5D);
                              bit_set(bit_sx[k] + i, bit_sy[k] + j, -1);
                          }
                          break;
                      }
          
                  if(flag2 && bit_sound > 0)
                      sound1.play();
              }
          
              void bit_set(int i, int j, int k)
              {
                  int l = i + j * m_nAppX;
                  pix0[l] = k;
              }
          
              private int m_nAppX;
              private int m_nAppY;
              private int m_centerX;
              private int m_centerY;
              private int m_mouseX;
              private int m_mouseY;
              private int m_sleepTime;
              private boolean isError;
              private boolean m_isPaintFinished;
              boolean isRunning;
              boolean isInitialized;
              Thread runner;
              int pix0[];
              MemoryImageSource offImage;
              Image dbImg;
              int pixls;
              int pixls2;
              Random rand;
              int bits;
              double bit_px[];
              double bit_py[];
              double bit_vx[];
              double bit_vy[];
              int bit_sx[];
              int bit_sy[];
              int bit_l[];
              int bit_f[];
              int bit_p[];
              int bit_c[];
              int bit_max;
              int bit_sound;
              int ru;
              int rv;
              AudioClip sound1;
              AudioClip sound2;
          }
分页树展主题 · 全看首页 上页
/ 1
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河