| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1147 人关注过本帖
标题:怪事:线程在没被触发时,自动运行?
只看楼主 加入收藏
xiangyo
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-10-30
收藏
 问题点数:0 回复次数:6 
怪事:线程在没被触发时,自动运行?
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import *;
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.);
pageTitle[1]="搜狐";
pageLink[1]=getURL("http://www.);
pageTitle[2]="腾讯";
pageLink[2]=getURL("http://www.);
pageTitle[3]="新浪";
pageLink[3]=getURL("http://www.);
pageTitle[4]="雅虎";
pageLink[4]=getURL("http://www.);
pageTitle[5]="TOM";
pageLink[5]=getURL("http://www.);
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用来设置背景颜色,第二个用来设置字体颜色,请问系统如何识别这两条语句的,怎么知道一条是用来设置背景,另一条是用来设置字体的?
搜索更多相关主题的帖子: 线程 怪事 触发 自动 运行 
2008-10-30 16:56
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
你在start方法里面不是启动了线程了吗?
你所说的设置背景颜色,根本就不是设置背景颜色。不过是设置了画笔的颜色,然后画了一个和背景一样大的矩形而已。
2008-10-30 17:48
xiangyo
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-10-30
收藏
得分:0 
谢谢,那start方法,被谁调用了?没有被调用啊
2008-10-31 13:27
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
[bo][un]huwangvs[/un] 在 2008-10-30 17:48 的发言:[/bo]

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

同意,你启动了线程了,而且这个类是实现了runnable接口,所以一旦启动就会自动调用run()的

学习需要安静。。海盗要重新来过。。
2008-10-31 14:20
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
[bo][un]xiangyo[/un] 在 2008-10-31 13:27 的发言:[/bo]

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


如果start是你自己写的,那么很抱歉。你覆盖了applet里的start方法。applet在init方法后会调用start方法。。。。
如果你不想线程启动,把start方法改成其他名字。
2008-10-31 14:27
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
另外给个建议。
applet这种东西,直接忽略掉就行了。Sun自己都不用的技术。
2008-10-31 14:30
xiangyo
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-10-30
收藏
得分:0 
谢谢,各位
2008-11-02 12:05
快速回复:怪事:线程在没被触发时,自动运行?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021490 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved