您的位置:程序门 -> java -> j2se / 基础类



线程调用主类方法问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


线程调用主类方法问题
发表于:2007-04-03 21:05:42 楼主
父类继承japplet,实现图形界面,
子类有两个线程,一个向server端接收发送socket数据报,并放入缓冲区
另一个线程从缓冲区取出数据并解析
现在的问题是,如何根据解析出的数据调用父类方法动态改变图形界面状态
发表于:2007-04-03 21:23:561楼 得分:0
在方法里实现不就行了吗
发表于:2007-04-03 21:31:352楼 得分:0
让我想到的是~要实现时时刷新!
发表于:2007-04-03 21:33:533楼 得分:0
把原来的去掉,画新的就可以了吧?其实感觉应该是3个线程的东西,拿数据的线程拿有显示线程的japplet对象的引用就可以了吧
发表于:2007-04-03 21:34:304楼 得分:0
解析的线程,解析后repaint就实时更新了,japplet看做jframe   没社么太大区别的.建议先作成jframe,然后转成japplet
发表于:2007-04-03 21:44:035楼 得分:0
将socket连接线程作为内部类
发表于:2007-04-03 22:13:296楼 得分:0
谢谢各位的热心回帖,试了很多方法都不行
class   bufferget   extends   thread
{
          buffer   buf;
          socket   client;
          private   resultprocessor   processor;

          bufferget(resultprocessor   processor,buffer   buf,socket   client)
          {
this.processor   =   processor;
this.client=client;
this.buf=buf;
          }

          public   void   run()
          {
                    while(true)
{
          string   result=this.buf.get();
          system.out.println( "incept:   --> "+result);
          processor.process(result);
}
          }
}
父类:
interface   resultprocessor
{
        public   void   process(string   result);
}
public   class   jappletui   extends   japplet   implements   resultprocessor
{
        ...
        public   void   init()
        {
                jappletui   appletui=new   jappletui();
                bufferget   bfget=new   bufferget(appletui,clientsocket);
                bfget.start();
        }
        public   void   process(string   result)
        {
                  statelabel.settext(result);//在界面jlable显示某状态
                  agentstate= "0 ";
                  change();//改变界面样式;
        }
        ...
}

在执行到statelabel.settext(result);时报错(change();也会报):
exception   in   thread   "thread-4 "   java.lang.nullpointerexception
                  at   jappletui.process(jappletui.java:79)
at   bufferget.run(socketclient.java:155)//这行processor.process(result);

有没有什么好办法能解决?
我现在把japplet的组件和change();方法都改为静态的就没问题了,但觉得这么做不是很好。
感觉把bufferget类做为内部类应该能行,但不知道怎么改,哪位朋友能帮帮忙?谢了!
发表于:2007-04-03 23:26:357楼 得分:0
bufferget(resultprocessor   processor,buffer   buf,socket   client)
bufferget   bfget=new   bufferget(appletui,clientsocket);
还有其他构造函数吗?
发表于:2007-04-05 15:12:268楼 得分:0
bufferget   bfget=new   bufferget(appletui,clientsocket);
写错了,应该是
buffer   buf=new   buffer();
bufferget   bfget=new   bufferget(appletui,buf,clientsocket1[chanid]);

buffer类为定义缓冲区类,存放数据
发表于:2007-04-05 17:24:179楼 得分:0
来学习学习,帮顶一下
发表于:2007-04-05 18:17:5310楼 得分:0
swing包是线程不安全的。

主要在于japplet。建议看一下。

http://gceclub.sun.com.cn/java_docs/jdk6/html/zh_cn/api/javax/swing/package-summary.html
发表于:2007-04-05 22:20:0511楼 得分:0
public   void   process(string   result)
加synchronized试试.


快速检索

最新资讯
热门点击