当前位置: 代码迷 >> Java相关 >> 怎么做啊??
  详细解决方案

怎么做啊??

热度:681   发布时间:2007-06-15 20:21:52.0
怎么做啊??
我想实现的功能是在APPLET状态栏里显示2 4 6 8 16 32 64........可是不知道怎么用applet啊

import java.applet.APPLET;
import java.awt.*;
public class gu extends Applet{
public static void main(String args[]){
int s=1;
do{s=s*2;
System.out.println(s);
}while(s<999999999);
}
}
我写了.HTML文件.这样行吗??高手们帮我看看啊..谢谢先.
<HTML>
<HEAD><TITLE>gu</TITLE>
</HEAD>
<applet code="gu.class" width=300 height=100>
</applet>
</HTML>
我不知道怎么做啊,超级菜鸟求助啊
搜索更多相关的解决方案: public  import  状态栏  

----------------解决方案--------------------------------------------------------
我这样编可以吗.高手们给点指示啊..
----------------解决方案--------------------------------------------------------
自己运行吧,不行再说吧。
----------------解决方案--------------------------------------------------------
我运行拉,就是不会显示啊,.
----------------解决方案--------------------------------------------------------
大家帮我看看哪里错拉啊呀,菜鸟啊.
----------------解决方案--------------------------------------------------------
怎么没人回答下我啊???

[此贴子已经被作者于2007-6-16 21:22:02编辑过]



----------------解决方案--------------------------------------------------------
Applet是一种特殊的Java程序,请查阅Applet生命周期相关资料,便可知道标准Applet程序最少有4个方法:
init()必须有 像桌面程序(Application)中的main()方法,Applet加载后直接运行此方法
start()可选 当你从其它网页返回到此Applet网页时运行此方法
stop()可选 当Applet所在的网页页面发生跳转时运行此方法
destroy()可选 像桌面程序(Application)中的exit()方法,当网页浏览器关闭或中止Applet时运行此方法
上述四个方法的作用纯属个人理解,如有偏差,还请以SUN的JDK(API文档)为准!

将楼主的程序按Applet要求修改如下:
import java.applet.*;
import java.awt.*;
public class gu extends Applet
{
  int s=1;
  public void init()
  {
    do
    {
      s=s*2;
      repaint();
//Applet属于GUI程序,所以必须用paint方法在组件上面绘出内容,而不是用控制台的println()方法!
//调用repaint()方法等于间接调用paint()方法;
    }
while(s<999999999);
  }
  public void paint(Graphics g)
  {
    g.drawString(String.valueOf(s),60,80);
  }
}
因为Java的速度会很快,所以,这样的代码会直接让我们看到最后那个最大的结果,而看不到s动态变化的过程,对程序做小小的修改!

import java.applet.*;
import java.awt.*;
public class gu extends Applet implements Runnable
{
  int s=1;
  public void init()
  {
    new Thread(this).start();
  }
  public void run()
  {
    do
    {
      try
      {
        Thread.sleep(1000);
      }
      catch (Exception e)
      {
      }
      s=s*2;
      repaint();
    }
    while(s<999999999);
  }
  public void paint(Graphics g)
  {
    g.drawString(String.valueOf(s),60,80);
  }
}
这里,让类实现了Runnable接口,即创建了线程!
创建线程的原因是我们要创建动画,如果我们不创建线程,而是将do while循环放在类的某个方法当中,那么那个方法会一直占用CPU,其它方法无法运行,即无法更新绘制的图像!当循环结束,计算出s最大的值后,paint方法才有机会运行,仅将最后的s结果绘制出来!
我们创建线程后,将循环放入线程中,Applet类的paint方法(其实也是一个线程)会和循环一起工作,每当s的值更新后,paint方法就将更新的s的值绘制在Applet面板上,并覆盖掉原来绘制在Applet面板上面的内容!我们就看到了动态更新的动画(这个算是最最简单的动画了吧)!
如果仅仅是在状态栏显示,程序代码修改如下:
import java.applet.*;
public class gu extends Applet
{
  int s=1;
  public void init()
  {
    do
    {
      try
      {
        Thread.sleep(1000);
      }
      catch (Exception e)
      {
      }
      s=s*2;
      showStatus(String.valueOf(s));
    }
    while(s<999999999);
  }
}

[此贴子已经被作者于2007-6-16 23:44:47编辑过]


----------------解决方案--------------------------------------------------------

import java.awt.*;

public class Test extends java.applet.Applet {
int s=1;
String str="";
String str1="";
/** Initialization method that will be called after the applet is loaded
* into the browser.
*/
public void init() {
this.setBackground(Color.green);
}

public void paint(Graphics g) {
Graphics2D s2d=(Graphics2D)g;
s2d.setFont(new Font("宋体",Font.ITALIC,36));
while(s<999999)
{
s2d.setColor(Color.black);
s2d.drawString(str1,50,50);
s=s*2;
str=s+"";

s2d.setColor(Color.red);

s2d.drawString(str,50,50);
try{
Thread.sleep(1000);
}catch(Exception ex)
{

}

}

repaint();

}

}

<HTML>
<HEAD><TITLE>gu</TITLE>
</HEAD>
<applet code="Test .class" width=300 height=100>
</applet>
</HTML>


----------------解决方案--------------------------------------------------------
以下是引用xslff在2007-6-16 23:05:01的发言:
Applet是一种特殊的Java程序,请查阅Applet生命周期相关资料,便可知道标准Applet程序最少有4个方法:
init()必须有 像桌面程序(Application)中的main()方法,Applet加载后直接运行此方法
start()可选 当你从其它网页返回到此Applet网页时运行此方法
stop()可选 当Applet所在的网页页面发生跳转时运行此方法
destroy()可选 像桌面程序(Application)中的exit()方法,当网页浏览器关闭或中止Applet时运行此方法
上述四个方法的作用纯属个人理解,如有偏差,还请以SUN的JDK(API文档)为准!

将楼主的程序按Applet要求修改如下:
import java.applet.*;
import java.awt.*;
public class gu extends Applet
{
  int s=1;
  public void init()
  {
    do
    {
      s=s*2;
      repaint();
//Applet属于GUI程序,所以必须用paint方法在组件上面绘出内容,而不是用控制台的println()方法!
//调用repaint()方法等于间接调用paint()方法;
    }
while(s<999999999);
  }
  public void paint(Graphics g)
  {
    g.drawString(String.valueOf(s),60,80);
  }
}
因为Java的速度会很快,所以,这样的代码会直接让我们看到最后那个最大的结果,而看不到s动态变化的过程,对程序做小小的修改!

import java.applet.*;
import java.awt.*;
public class gu extends Applet implements Runnable
{
  int s=1;
  public void init()
  {
    new Thread(this).start();
  }
  public void run()
  {
    do
    {
      try
      {
        Thread.sleep(1000);
      }
      catch (Exception e)
      {
      }
      s=s*2;
      repaint();
    }
    while(s<999999999);
  }
  public void paint(Graphics g)
  {
    g.drawString(String.valueOf(s),60,80);
  }
}
这里,让类实现了Runnable接口,即创建了线程!
创建线程的原因是我们要创建动画,如果我们不创建线程,而是将do while循环放在类的某个方法当中,那么那个方法会一直占用CPU,其它方法无法运行,即无法更新绘制的图像!当循环结束,计算出s最大的值后,paint方法才有机会运行,仅将最后的s结果绘制出来!
我们创建线程后,将循环放入线程中,Applet类的paint方法(其实也是一个线程)会和循环一起工作,每当s的值更新后,paint方法就将更新的s的值绘制在Applet面板上,并覆盖掉原来绘制在Applet面板上面的内容!我们就看到了动态更新的动画(这个算是最最简单的动画了吧)!
如果仅仅是在状态栏显示,程序代码修改如下:
import java.applet.*;
public class gu extends Applet
{
  int s=1;
  public void init()
  {
    do
    {
      try
      {
        Thread.sleep(1000);
      }
      catch (Exception e)
      {
      }
      s=s*2;
      showStatus(String.valueOf(s));
    }
    while(s<999999999);
  }
}

好像在状态栏显示的那个程序不会无限循环啊.


----------------解决方案--------------------------------------------------------
不应该把这个放在init里面执行,init是初始化用的,应该快速返回

你想要看到循环的效果,应该另起一个线程来做这个事情
----------------解决方案--------------------------------------------------------
  相关解决方案