当前位置: 代码迷 >> Java相关 >> 怪事:线程在没被触发时,自动运行?
  详细解决方案

怪事:线程在没被触发时,自动运行?

热度:451   发布时间:2008-10-30 16:56:46.0
怪事:线程在没被触发时,自动运行?
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
public class Revolve extends JApplet
implements Runnable,ActionListener{
String[] pageTitle=new String[6];
URL[] pageLink=new URL[6];
Color butterscotch=new Color(255,204,158);
int current=0;
Thread runner;

public void init(){
pageTitle[0]="网易";
pageLink[0]=getURL("http://www.163.com");
pageTitle[1]="搜狐";
pageLink[1]=getURL("http://www.sohu.com");
pageTitle[2]="腾讯";
pageLink[2]=getURL("http://www.qq.com");
pageTitle[3]="新浪";
pageLink[3]=getURL("http://www.sina.com.cn");
pageTitle[4]="雅虎";
pageLink[4]=getURL("http://www.yahoo.com.cn");
pageTitle[5]="TOM";
pageLink[5]=getURL("http://www.tom.com");
Button goButton=new Button("Go");
goButton.addActionListener(this);
FlowLayout flow=new FlowLayout();
setLayout(flow);
add(goButton);}

URL getURL(String urltext){
URL pageURL=null;
try{pageURL=new URL(getDocumentBase(),urltext);
}catch(MalformedURLException m){}
return pageURL;
}

public void paint(Graphics screen){
Graphics2D screen2D=(Graphics2D)screen;
screen2D.setColor(butterscotch);
screen2D.fillRect(0,0,getSize().width,getSize().height);
screen2D.setColor(Color.red);
screen2D.drawString(pageTitle[current],5,60);
screen2D.drawString(""+pageLink[current],5,80);
}

public void start(){
if(runner==null){
runner=new Thread(this);
runner.start();}}

public void run(){
Thread thisThread=Thread.currentThread();
while(runner==thisThread){
current++;
if(current>5){current=0;}
repaint();
try{Thread.sleep(10000);}
catch(InterruptedException e){}}}

public void stop(){
if(runner!=null){
runner=null;}}

public void actionPerformed(ActionEvent evt){
if (runner!=null){
runner=null;}
AppletContext browser=getAppletContext();
if(pageLink[current]!=null){
browser.showDocument(pageLink[current]);}}}
1.请问线程在什么地方被触发了?个人认为在INIT()函数中,没有线程开始的语句,但线程却在程序一开始就运行了?
2.screen2D.setColor(butterscotch);
screen2D.fillRect(0,0,getSize().width,getSize().height);
screen2D.setColor(Color.red);在这里,第一个SETCOLOR用来设置背景颜色,第二个用来设置字体颜色,请问系统如何识别这两条语句的,怎么知道一条是用来设置背景,另一条是用来设置字体的?
搜索更多相关的解决方案: 线程  怪事  触发  自动  运行  

----------------解决方案--------------------------------------------------------
你在start方法里面不是启动了线程了吗?
你所说的设置背景颜色,根本就不是设置背景颜色。不过是设置了画笔的颜色,然后画了一个和背景一样大的矩形而已。
----------------解决方案--------------------------------------------------------
谢谢,那start方法,被谁调用了?没有被调用啊
----------------解决方案--------------------------------------------------------
[bo][un]huwangvs[/un] 在 2008-10-30 17:48 的发言:[/bo]

你在start方法里面不是启动了线程了吗?
你所说的设置背景颜色,根本就不是设置背景颜色。不过是设置了画笔的颜色,然后画了一个和背景一样大的矩形而已。

同意,你启动了线程了,而且这个类是实现了runnable接口,所以一旦启动就会自动调用run()的
----------------解决方案--------------------------------------------------------
[bo][un]xiangyo[/un] 在 2008-10-31 13:27 的发言:[/bo]

谢谢,那start方法,被谁调用了?没有被调用啊


如果start是你自己写的,那么很抱歉。你覆盖了applet里的start方法。applet在init方法后会调用start方法。。。。
如果你不想线程启动,把start方法改成其他名字。
----------------解决方案--------------------------------------------------------
另外给个建议。
applet这种东西,直接忽略掉就行了。Sun自己都不用的技术。
----------------解决方案--------------------------------------------------------
谢谢,各位
----------------解决方案--------------------------------------------------------
  相关解决方案