我现在在做一个项目,用到了swt中的browser控件,我让我的类继承了ServerSocket,这样我在main函数中开启socket监听,得到新的url时,我就browser.setUrl(url),更新浏览器,得到新的页面,但是我的程序一运行,就没反应,请问这是怎么回事啊,有谁有解决方法没?service函数时开启socket监听的,代码如下:package test2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.OpenWindowListener;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.browser.VisibilityWindowListener;
import org.eclipse.swt.browser.WindowEvent;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
/**
 * 类作用:类作用为虚拟浏览器引擎组件
 * @author qsw-Myonlystar 2010-4-28
 */
public class VirtualBrowser extends ServerSocket {
public static final int SERVER_PORT = 9696;//侦听的端口
private static final int BUFFER_SIZE=65535;
private String line="";
private BufferedReader in;//输入流
private PrintWriter out;//输出流
private final ArrayList urls = new ArrayList(); // @jve:decl-index=0:
private boolean canRemove = false;
private String script = null;// 需要执行的script代码
private String url =null;// 需要抓取页面的url
private String htmlStr=null;//抓取页面得到的html代码
private Shell shell;
/**
 * 构造函数
 * @param url 需要抓取的web页面的地址;
 * @param script 需要解析的javascript脚本,无,请赋值为null;
 */
/*public VirtualBrowser(String url,String script){
this.url=url;
this.script=script;
}*/
public VirtualBrowser() throws IOException {
super(SERVER_PORT);
// TODO Auto-generated constructor stub
}

/**
 * 设置script
 * @param script
 */
public void setScript(String script){
this.script=script;
}
/**
 * 返回抓取页面的源代码
 * @return
 */
public String getHtmlStr(){
return this.htmlStr;
}

/**
 * 返回当前的display
 * @return
 */
public Display returnCurrentDisp(){
return Display.getCurrent();
}
/**
 * 函数开启socket监听
 * @param display
 * @param browser
 */
public void service(Display display,final Browser browser){
try
{
System.out.println("开始监听:");
while (true)
{
Socket socket = accept();//侦听并接受到此套接字的连接
//解析得到socket字符串
in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
out = new PrintWriter(socket.getOutputStream(), true);
line=in.readLine().toString().trim();
System.out.println("接收到的信息"+line);
//调用线程进行处理
display.syncExec(new Runnable() {
public void run() {
System.out.println("ffff");
         browser.setUrl(line);
        }
      });
}
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally

try {
close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
/**
 * 启动shell
 * @param display
 * @return
 */
/*private Shell open(Display display){
shell = new Shell(display);
shell.setText("虚拟浏览器");
// Image image = new Image(shell.getDisplay(), "Favicon.ico");
// shell.setImage(image);
shell.setLayout(new FillLayout());
Browser browser = new Browser(shell, SWT.NONE);
initialize(display, browser);
shell.open();
return shell;
}*/

/**
 * 初始化控件,增加监听事件
 * 
 * @param display
 * @param browser
 */
public void initialize(final Display display, Browser browser) { browser.addListener(SWT.MouseDown, new Listener() {
public void handleEvent(Event event) {
System.out.println("event.time:" + event.time);
}
});
browser.addOpenWindowListener(new OpenWindowListener() {
public void open(WindowEvent event) {
// Embed the new window
final Shell shell = new Shell(display);
shell.setText("New Window");
shell.setLayout(new FillLayout());
final Browser browser = new Browser(shell, SWT.NONE);
initialize(display, browser);
event.browser = browser;
event.display.asyncExec(new Runnable() {
public void run() {
String url = browser.getUrl();
System.out.println(url);
System.out.println(browser.getText());
if (urls.contains(url)) {
// flag to chek if the window is closed automatic
canRemove = false;
shell.close();
} else {
canRemove = true;
urls.add(url);
} }
});
}
}); browser.addLocationListener(new LocationListener() {
@Override
public void changed(LocationEvent event) {
Browser browser = (Browser) event.widget;
// TODO Auto-generated method stub
// System.out.println("addLocationListener changed:"+browser.getText());
} @Override
public void changing(LocationEvent event) {
Browser browser = (Browser) event.widget;
// TODO Auto-generated method stub
// System.out.println("addLocationListener changing:"+browser.getText());
}
}); browser.addVisibilityWindowListener(new VisibilityWindowListener() {
public void hide(WindowEvent event) {
Browser browser = (Browser) event.widget;
Shell shell = browser.getShell();
shell.setVisible(false);
} public void show(WindowEvent event) {
Browser browser = (Browser) event.widget;
Shell shell = browser.getShell();
if (event.location != null)
shell.setLocation(event.location);
if (event.size != null) {
Point size = event.size;
shell.setSize(shell.computeSize(size.x, size.y));
}
if (event.addressBar || event.menuBar || event.statusBar
|| event.toolBar) {
// Create widgets for the address bar, menu bar, status bar
// and/or tool bar
// leave enough space in the Shell to accomodate a Browser
// of the size
// given by event.size
}
shell.open();
}
}); browser.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent event) {
Browser browser = (Browser) event.widget;
if (canRemove)
urls.remove(browser.getUrl());
Shell shell = browser.getShell();
 System.out.println("end is:"+browser.getText());
// shell.close();
}
});
/**
 * 执行javascript,并获取页面源代码值
 */
browser.addProgressListener(new ProgressListener() {
@Override
public void changed(ProgressEvent event) {
// TODO Auto-generated method stub } @Override
public void completed(ProgressEvent event) {
// TODO Auto-generated method stub
Browser browser = (Browser) event.widget;
/*if (script != null) {
browser.execute(script);
script = null;
htmlStr=browser.getText();
}else{
htmlStr=browser.getText();
Shell shell=browser.getShell();
//shell.close();
}*/
}
}); }
/**
 * 测试主函数
 * @param args
 */
public static void main(String[] args) {
VirtualBrowser v;
try {
v = new VirtualBrowser();
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("虚拟浏览器");
shell.setLayout(new FillLayout());
Browser browser = new Browser(shell, SWT.NONE);
v.initialize(display, browser);
shell.open();
//browser.setUrl("www.baidu.com");
//启动socket监听
//v.service(Display.getDefault(),browser);
v.service(display, browser);
while (!shell.isDisposed()) {
if (!display.readAndDispatch()){
display.sleep();
}
}
display.dispose();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}}socket客户端的代码如下:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;/**
 * @author qsw-Myonlystar 2009-10-28下午03:52:08
 *
 */
public class MyClient {
static Socket server;
public static void main(String str[]) throws Exception
{
server=new Socket("127.0.0.1",9696);//设置服务器的地址
BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream()));//得到服务器端信息
PrintWriter out =new PrintWriter(server.getOutputStream());//把信息写入服务器端
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));//用户输入的信息放在wt
out.println("www.renren.com");//显示在服务器端
out.flush();
server.close();

}
}
跪求高手解决,在线急等。