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?