imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 23.11.2007, 17:53     # 1
tvcool
Member
 
Аватар для tvcool
 
Регистрация: 02.06.2002
Сообщения: 357

tvcool Известность не заставит себя ждать
Question Exceptions и Threads в Java

Как кинуть exception из thread-а ?
И как его поймать в thread-е из которого кидающий thread был запущен?
tvcool вне форума  
Старый 24.11.2007, 13:04     # 2
EjikVTumane
Member
 
Аватар для EjikVTumane
 
Регистрация: 18.04.2002
Адрес: Ф туманах Новосибирска...
Сообщения: 378

EjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собойEjikVTumane Имеются все основания чтобы гордиться собой
Исключения которые не обрабатываются в потоке из которого они были брошены ловятся следующим образом:

Можно также установить обработчик исключений по-умолчанию для всех создаваемых потоков: Thread.setUncaughtExceptionHandler.
Код:
package test;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.lang.Thread.UncaughtExceptionHandler;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {

	private static UncaughtExceptionHandler uncaughtExceptionHandler;

	private static JFrame frame;

	private static JLabel infoLabel;
	
	private static int i;
	
	public static void main(String[] args) {

		uncaughtExceptionHandler = new ExceptionHandler();

		frame = new JFrame();
		
		JPanel panel;
		panel = new JPanel();
		
		infoLabel = new JLabel();
		
		
		JButton threadLaunchButton;
		threadLaunchButton = new JButton();

		panel.add(threadLaunchButton, BorderLayout.CENTER);
		panel.add(infoLabel, BorderLayout.NORTH);
		
		threadLaunchButton.setAction(new ThreadLaunchAction());
		
		frame.setContentPane(panel);
		frame.setSize(600, 400);
		frame.addWindowListener(new MainFrameCloseHandler());
		
		frame.setVisible(true);
	}
	
	private static final class ExceptionHandler implements
			UncaughtExceptionHandler {
		public void uncaughtException(Thread t, Throwable e) {
			infoLabel.setText("Exception with message: '" + e.getMessage() + "' was caught (" + i + ")!");
			i++;
			
		}
	}

	private static final class MainFrameCloseHandler extends WindowAdapter {
		@Override
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	}

	@SuppressWarnings("serial")
	private static final class ThreadLaunchAction extends AbstractAction {

		public ThreadLaunchAction() {
			super("Throw exception");
		}
		
		public void actionPerformed(ActionEvent e) {
			
			Thread t;
			t = new Thread(new Runnable()
			{
				public void run()
				{
					throw new RuntimeException("I am exception from thread.");
				}
				
			}, "Test thread");
			
			t.setUncaughtExceptionHandler(uncaughtExceptionHandler);
			t.start();
		}
	}

}
Если тебе надо обрабатывать исключения, которые бросаются из Swing event thread, то это буедт делаться несколько по другому.
__________________
Трофейные шляпки от гвоздей: ○○○○○○○○

Последний раз редактировалось EjikVTumane; 24.11.2007 в 13:13. Причина: немного дополнительной информации...
EjikVTumane вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 19:15.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.