Filedialog正在杀死我的线程

时间:2010-12-06 12:57:53

标签: java multithreading sockets thread-safety

我在Java中使用 socket 程序。 我在后台运行带有套接字服务器的 GUI 套接字服务器正在运行线程,每隔10ms检查一次套接字消息。 它们都可以一起运行,但是当我尝试在 gui 中打开我的文件对话框时, gui 崩溃,但服务器继续运行。 我以为我以错误的方式运行服务器(或服务器线程)。 如果我跳过套接字,文件对话框可以正常工作。

可能是什么问题,是不是我以错误的方式运行线程?

(这是一堂课)

public ServerController(){
        ServSocket st = new ServSocket();
    Thread thread1=new Thread(st);
    thread1.start();
    }

(这是我的主题)

public void run(){
    while (true) {
        try { 
            Thread.sleep(10);
        }
        catch (InterruptedException e) {}

        switch (Status) {
        case CONNECTED:
            try {

                socket = new Socket(hostIP, port);
                System.out.println("Connected on: " + hostIP + port);

                out = new PrintWriter(socket.getOutputStream(), true);
                changeStatus(STARTSENDING, true);
            }
            catch (IOException e) {
                System.out.println("disconnected");
            }
            break;

(这是我的主要)

 static ServerController scon;
 static Controller cn;

 public static void main(String[] args) {
     scon = new ServerController();
      cn = new Controller();
     cn.gui();


      }

2 个答案:

答案 0 :(得分:2)

在这里猜测,但我认为这与EDT有关。

您是否尝试从EDT外部启动对话框? http://en.wikipedia.org/wiki/Event_dispatching_thread

如果您认为可能,请尝试使用SwingUtilities静态方法(特别是isEventDispatchThread和invokeLater)来磨练并纠正问题:

http://java.sun.com/javase/6/docs/api/javax/swing/SwingUtilities.html#isEventDispatchThread()

http://java.sun.com/javase/6/docs/api/javax/swing/SwingUtilities.html#invokeLater(java.lang.Runnable

HTH

答案 1 :(得分:1)

问题现在解决了。 似乎问题是我有一个扫描程序在线程中每10毫秒等待输入(string = sc.next();),并在几次输入后我的GUI显示。 我删除了扫描仪,现在我有了一个有效的应用程序。