我在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();
}
答案 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显示。
我删除了扫描仪,现在我有了一个有效的应用程序。