java线程没有超出范围

时间:2013-12-12 06:16:35

标签: java multithreading sockets

让我尽量解释问题。我有一个主类,从这个主类,我创建一个套接字读写器。然后我创建一个Reader'runnable'并使用threadmanager启动线程。

// MainApp.java

    public class MainApp{
            public static void main (String[] args){
                      MainApp app = new MainApp();
                      app.setUpNetworking();
                    }

            public void setUpNetworking(){
               try{// try socket conn
                  ThreadManager();
                  }catch{ //catch errors}}

            public void ThreadManager(){
                Thread t1 = new Thread(new ProcessMessage());
                t1.start();}

            public class ProcessMessage implements Runnable{
                public void run() {
                String message;// TODO Auto-generated method stub

                try{

                while((message=reader.readLine()) != null){

                    // read line from buffer
                                System.out.println(message)"
                    HandleMessage(message);

                }


                    } catch{}

                    }}

            public void HandleMessage(String message){System.out.println(message);}
            public void LoadGUI(){//load GUI, menubar, etc.


menuBarSubItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ev){

            AdditionalFunction d = new AdditionalFunction(reader,writer);
        }
    });}
                    }

到目前为止一切正常。现在在LoadGUI()中创建一个Jframe,加载并添加一个jmenubar,并添加一些菜单栏项。我为菜单栏项创建了一个actionlistener,用于加载另一个类(基本上,点击菜单栏项,新的jframe加载AdditionalFunction(读者,作者))

// AdditionalFunction.java

public class AdditionalFunction  {
public AdditionalFunction(BufferedReader reader, PrintWriter writer){
ThreadManager();
    }


    public void ThreadManager(){

        Thread t1 = new Thread(new ProcessDifferentMessage());
        t1.start();
    }

    public class ProcessDifferentMessage implements Runnable{
        public void run(){
            String message;


            try{

                while((message=r.readLine()) != null){

                    System.out.println(message);
                    HandleDifferentMessage();


                }

            } catch(Exception ex){ex.printStackTrace();}

        }

    }
    }

在这个新框架中,(称之为AdditionalFunction.java)我传递了我在Main类中创建的BufferedReader和writer。

然后我创建了一个threadmanager并尝试从新框架运行一个线程(称为ProcessDifferentMessage())(即AdditionalFunction.java,就像我在原始主应用程序中所做的那样)。

(所以此时我应该运行两个线程..一个专注于只读取ProcessMessage()和另一个ProcessDifferentMessage()。

ProcessMessage()触发正常(在打开AdditionalFunction.java之前)..但是在通过单击菜单栏项启动AdditionalFunction.java之后,当我尝试通过套接字发送消息时,它应该只触发ProcessDifferentMessage()..它不会发射,发射它再发射它,然后再发送它不会发射。

当我关闭第二个Jframe并且我发送应该触发ProcessDifferentMessage()的消息时,相同的行为有时不会触发。但是在这一点上,我不希望这个步骤甚至触发ProcessDifferenMessage(),因为我关闭了AdditionalFunction.java框架。

简而言之:我有一个主类,它创建一个线程,并为它提供一个可运行的incomingmessagereader。这个主类还有GUI,某些菜单项触发新的Jframe。 (即扩展JFrame的AdditionalFunction.java)。我将主类中创建的读/写器从主类传递给AdditionalFunction构造函数。从additionalFunction.java我创建一个新线程并给它另一个incomingmessagereader runnable(不同的实现和方法)。但我希望第二个incomingmessagereader可以在我关闭它的原始jframe时停止从套接字读取行(即,对于第二个incomingmessagereader可运行它将是additionalfunction.java)..但即使在我关闭第二个jframe之后......线程仍然是积极阅读信息。

  1. 为什么第二个线程不在范围之外?
  2. 关闭第二个窗口后如何强行处理它? (我试过windowevent / adapter并破坏第二个线程..没有用)

0 个答案:

没有答案