Java Filedialog正在终止我的线程
我正在用Java编写一个套接字程序。 我在后台运行一个带有套接字服务器的GUI。 套接字服务器正在运行一个线程,该线程每10毫秒检查一次套接字消息。 它们一起运行都很好,但只要我尝试在gui中打开我的文件对话框,gui就会崩溃,但服务器仍在运行。 我认为我用错误的方式运行服务器(或服务器线程)。 如果跳过套接字,文件对话框工作正常 可能是什么问题,可能是我以错误的方式运行线程吗 (这是一节课) (这是我的帖子) (这是我的主要观点)Java Filedialog正在终止我的线程,java,multithreading,sockets,thread-safety,Java,Multithreading,Sockets,Thread Safety,我正在用Java编写一个套接字程序。 我在后台运行一个带有套接字服务器的GUI。 套接字服务器正在运行一个线程,该线程每10毫秒检查一次套接字消息。 它们一起运行都很好,但只要我尝试在gui中打开我的文件对话框,gui就会崩溃,但服务器仍在运行。 我认为我用错误的方式运行服务器(或服务器线程)。 如果跳过套接字,文件对话框工作正常 可能是什么问题,可能是我以错误的方式运行线程吗 (这是一节课) (这是我的帖子) (这是我的主要观点) 我只是猜一下,但我认为这与EDT有关 您正在尝试从EDT外部启
我只是猜一下,但我认为这与EDT有关 您正在尝试从EDT外部启动对话框吗 如果您认为有可能,请尝试使用SwingUtilities静态方法(特别是isEventDispatchThread和invokeLater)磨练并纠正此问题: () )
hth这里只是猜测,但我认为这与EDT有关 您正在尝试从EDT外部启动对话框吗 如果您认为有可能,请尝试使用SwingUtilities静态方法(特别是isEventDispatchThread和invokeLater)磨练并纠正此问题: () ) 这个问题现在解决了。 似乎问题在于,我有一个扫描器在线程中每隔10毫秒等待输入(
string=sc.next();
),输入几次后,我的GUI显示出来。
我卸下了扫描仪,现在有了一个可用的应用程序。问题现在解决了。
似乎问题在于,我有一个扫描器在线程中每隔10毫秒等待输入(string=sc.next();
),输入几次后,我的GUI显示出来。
我删除了扫描仪,现在有了一个正常工作的应用程序。您的代码不完整,很难说发生了什么。需要更多关于“gui崩溃”的信息(异常?冻结?)gui冻结,但服务器运行正常,没有异常或错误消息等等,还有哪些代码是有用的?文件对话框做什么?从何处调用?文件对话框从GUI中的JMenu打开,假设它选择一个文件和“getName”+“getAbsolutePath”,进一步考虑,假设通过套接字服务器发送消息中的名称和路径。您的代码不完整,很难说会发生什么。有关“GUI崩溃”的更多信息需要(异常?冻结?)Gui冻结,但服务器运行正常,没有异常或错误消息。那么,还有什么部分代码有用?文件对话框做什么?它从何处调用?文件对话框从GUI中的JMenu打开,假设它选择一个文件和“getName”+“getAbsolutePath”,在进一步思考中,假设通过套接字服务器发送消息中的名称和路径。
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();
}