Wyjatek którego nie ma prawa być

0

Postanowiłem dla odmiany popisać w javie na linuksie(wiem, żadna różnica). Otóż mam bardzo dziwny problem. Przy próbie pobrania sekwensera midi program zgłasza wyjątek. Nie było by to nic dziwnego gdyby nie to że przy takim kodzie

import javax.sound.midi.*;

public class Tester implements Runnable{

	public void run() {
		try {
			Sequencer sequencer= MidiSystem.getSequencer();
		} catch (Exception e) {
			System.err.println("masz problem");
		}
		
	}
	
	public static void main(String[] args){
		new Tester().run();
	}
}

program wypisuje na konsole

Exception in thread "main" java.lang.UnsatisfiedLinkError: init_
   at gnu.javax.sound.midi.alsa.AlsaMidiDeviceProvider.init_(libgcj.so.10)
   at gnu.javax.sound.midi.alsa.AlsaMidiDeviceProvider.<clinit>(libgcj.so.10)
   at java.lang.Class.initializeClass(libgcj.so.10)
   at java.lang.Class.newInstance(libgcj.so.10)
   at gnu.classpath.ServiceProviderLoadingAction.run(libgcj.so.10)
   at java.security.AccessController.doPrivileged(libgcj.so.10)
   at gnu.classpath.ServiceFactory$ServiceIterator.loadNextServiceProvider(libgcj.so.10)
   at gnu.classpath.ServiceFactory$ServiceIterator.<init>(libgcj.so.10)
   at gnu.classpath.ServiceFactory.lookupProviders(libgcj.so.10)
   at gnu.classpath.ServiceFactory.lookupProviders(libgcj.so.10)
   at gnu.classpath.ServiceFactory.lookupProviders(libgcj.so.10)
   at javax.sound.midi.MidiSystem.getMidiDeviceInfo(libgcj.so.10)
   at javax.sound.midi.MidiSystem.getSequencer(libgcj.so.10)
   at tests.t001_Sequencer.Tester.run(Tester.java:11)
   at tests.t001_Sequencer.Tester.main(Tester.java:19)

Widać tutaj że maszyna javy wywołuje printStackTrace() dla wyjątku który jest zgłaszany. Jednak ja obsługuję wyjątki klasy Exception(czyli wszystkie tak?) i wypisuję na konsolę "masz problem" gdy wyjątek wystąpi. Czy jest to wyjątek który nie dziedziczy po klasie Exception?

Edit: ok już wiem, wyjątek zgłasza linker, ale co w tym kodzie nie gra?

0

Nie wiem, co nie gra w tym kodzie, ale tak - sa tzw. wyjatki nieweryfikowane - czyli nie wymuszajace uzywania try/catch, dziedzicza one po Throwable (Exception tez po nim dziedziczy).

0

to były chyba RuntimeException

0
  1. Ta klasa nie dziedziczy po Exception, a po Error
    http://java.sun.com/javase/6/docs/api/java/lang/UnsatisfiedLinkError.html
  2. Błąd wynika z braku jakiejś natywnej biblioteki
  3. Zamiast gcj, który jest już praktycznie martwy, użyj JDK od Suna lub OpenJDK (sun-java6-jdk lub openjdk-6-jdk)

1 użytkowników online, w tym zalogowanych: 0, gości: 1