Fehlermeldungen (Unknown Source) : /

Status
Nicht offen für weitere Antworten.

Don83

Bekanntes Mitglied
Hallo,
ich mache mal einen neuen Thread auf, da das vorherige Problem ja an sich gelöst war.
Also:
Ich habe nun folgenden Code:
Code:
import gov.nih.nlm.kss.api.KSSRetrieverV5_0;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;

import org.w3c.dom.Document;



import rmi.RMIClient;
import rmi.XMLBaseGenerator;

/**
 * This class is intended to work as a testing scenario for tracking a bug in
 * the UMLS add-on for the LRSMed application.
 * 
 * @author ******
 * 
 * Informell: Auswahl UMLS-Begriffe -> "Suche nach Begriffen"-Fenster öffnet
 * sich -> Sprache und freie Suche eingeben z.B. 'Herz' und Deutsch.-> "Suche
 * nach verwandten Bezeichnungen"-Fenster öffnet sich Auswahl eines Begriffs
 * z.B. 'Herzanorysma' -> Leider konnten keine verwandten Terme ermittelt
 * werden. Oder wenns klappt: Ihre Suche nach ... ACUTE PULMONARY HEART DISEASE
 * NOS ergab... Eve. geht deutsch ned? DE-- 2 EN++ 1 Diese Fehlermeldung gibts
 * auch: Leider konnte zur Zeit keine Verbindung zu dem UMLSKS Server
 * hergestellt werden, bitte versuchen Sie es später noch einmal! Beispiel:
 * ACUTE PULMONARY HEART DISEASE NOS -> ist ok Beispiel: ACUTE RHEUMATIC HEART
 * DISEASE -> keine Verbindung
 */
public class UMLS_Test extends JFrame{
	
	private String language="ENG";
	private String manipType="Word";
	private String method="findCUI";
	private String sources="standard";
	private String term="";
		
	private String[] langOptions = { "ENG", "GER" };
	private String[] manipOptions = { "Word", "NormalizeString","NormalizeWord","ExactMatch","TruncateRight","TruncateLeft","ApproxMatch" };
	private String[] methodOptions = { "findCUI", "findConcept" };
	private String[] vectorOptions = { "standard", "all" };
	
	
	private JLabel termLabel = new JLabel("Term");
	private JLabel langLabel = new JLabel("Lanuage");
	private JLabel manipLabel = new JLabel("ManipType");
	private JLabel methodLabel = new JLabel("Method");
	private JLabel vectorLabel = new JLabel("Source") ;
	
	private JTextField termField = new JTextField(35);	
	private JComboBox langBox = new JComboBox();
	private JComboBox manipBox = new JComboBox();
	private JComboBox methodBox = new JComboBox();
	private JComboBox vectorBox = new JComboBox();
	
	public UMLS_Test(String name){
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle(name);
		this.setSize(520, 130);
		Container inhalt = this.getContentPane();
		JTable oberEbene = new JTable();
		oberEbene.setLayout(new FlowLayout());
		inhalt.add(oberEbene);
		JPanel ersteEbene = new JPanel(new GridLayout(2,4));
		oberEbene.add(ersteEbene);
		JButton Runbutton = new JButton("Run");
		oberEbene.add(termLabel);
		oberEbene.add(termField);
		oberEbene.add(Runbutton);
		
		
		ersteEbene.add(langLabel);
		ersteEbene.add(manipLabel);
		ersteEbene.add(methodLabel);
		ersteEbene.add(vectorLabel);
		// Sprach Optionen:
		for (int i = 0; i < 2; i++){
		      this.langBox.addItem(langOptions[i]);}
		ersteEbene.add(langBox);
		langBox.addActionListener(new ActionListener() {
		      public void actionPerformed(ActionEvent e) {
		        language=(String) ((JComboBox) e.getSource()).getSelectedItem();
		      }
		});
		
		
		// ManipType Optionen:
		for (int j = 0; j < 7; j++){
		      this.manipBox.addItem(manipOptions[j]);}
		ersteEbene.add(manipBox);
		manipBox.addActionListener(new ActionListener() {
		      public void actionPerformed(ActionEvent e) {
		        manipType=(String) ((JComboBox) e.getSource()).getSelectedItem();
		      }
		});
		
		//Method Optionen:
		for (int k = 0; k < 2; k++){
		      this.methodBox.addItem(methodOptions[k]);}
		ersteEbene.add(methodBox);
		methodBox.addActionListener(new ActionListener() {
		      public void actionPerformed(ActionEvent e) {
		        method=(String) ((JComboBox) e.getSource()).getSelectedItem();
		      }
		});
		
		//Vector Optionen:
		for (int l = 0; l < 2; l++){
		      this.vectorBox.addItem(vectorOptions[l]);}
		ersteEbene.add(vectorBox);
		vectorBox.addActionListener(new ActionListener() {
		      public void actionPerformed(ActionEvent e) {
		        sources=(String) ((JComboBox) e.getSource()).getSelectedItem();
		      }
		});
		
		termField.addActionListener(new ActionListener() {
		      public void actionPerformed(ActionEvent e) {
		        term=(String) ((JTextField) e.getSource()).getText();
		        System.out.println("Search Term: \""+term+"\"");
		      }
		});
		
		Runbutton.addActionListener(new ActionListener() {
		      public void actionPerformed(ActionEvent e) {
		        System.out.println("Run Method \""+ method+"\" in language \""+language+"\" with manipType set to \""+manipType+"\" and with usage of "+sources+ " sources.");
		        runMethod(term, language, method, sources, manipType);
	
		        //dispose();
		      }
		});
		
		// display the GUI
		this.setVisible(true);
	}
    
	public void runMethod(String search_Term, String lang, String meth, String src,String manip ){
		// Befüllen der source Vectoren
		Vector vecSabs = null;
		Vector sabsDe = new Vector();
		Vector sabsEn = new Vector();
		sabsDe.add("MSHGER");
		sabsDe.add("WHOGER");
		sabsDe.add("MDRGER");
		sabsDe.add("DMDUMD");
		sabsEn.add("MSH");
		if(lang.equals("GER") && src.equals("standard")){
			vecSabs=sabsDe;
		}
		if(lang.equals("EN") && src.equals("standard")){
			vecSabs=sabsEn;
		}
		if(src.equals("all")){
			vecSabs.add("");
		}
		// Int value des Manip Types festlegen:
		int manipValue =4;
		if(manip.equals("ExactMatch")){
			manipValue=1;
		}
		if(manip.equals("NormalizeString")){
			manipValue=2;
		}
		if(manip.equals("NormalizeWord")){
			manipValue=3;
		}
		if(manip.equals("Word")){
			manipValue=4;
		}
		if(manip.equals("TruncateRight")){
			manipValue=5;
		}
		if(manip.equals("TruncateLeft")){
			manipValue=6;
		}
		if(manip.equals("ApproxMatch")){
			manipValue=7;
		}
		// Aufruf der getCUI	
		if(meth.equals("findCUI")){
			RMIClient c= new RMIClient();
		    c.connectedUmlsks();
		    String result=c.findCUI( search_Term, vecSabs, lang ,manipValue);//TruncateRight,ExactMatch
	       c.disconnectedUmlsks();
		   System.out.println(result);
		}
		if(meth.equals("findConcept")){
			RMIClient c= new RMIClient();
		    c.connectedUmlsks();
		    String result=c.findConcept( search_Term, vecSabs, lang ,manipValue);//TruncateRight,ExactMatch
	       c.disconnectedUmlsks();
		   System.out.println(result);
		}
	}
    
	public static void main(String[] args) {
		UMLS_Test gui = new UMLS_Test("LRSMed-Tester");
		
		//String search_fulltext = "ACUTE PULMONARY HEART DISEASE NOS"; //sollte klappen
		//String search_fulltext ="ACUTE RHEUMATIC HEART DISEASE";
		//String search_fulltext = "Heart";
		
		//String language = "ENG"; // oder GER... vom Formular kommt hier eine
		//Vector vecSabs = null;
	   //XMLBaseGenerator xmlParser= null;
		/* 1(GER) oder 2(ENG)
		// Wenn Sprache englisch oder Deutsch werden mit "getSabsVectorDe", oder
		// "getSabsVectorEn" folgende Vectoren angelegt:
		// Also die Vectoren werden mit den jeweils 10 aktuellen Quellabkürzungen
		 gefüllt.*/
		
		//Vector sabsDe = new Vector();
		//Vector sabsEn = new Vector();
		// jeweils 10 Werte noch einfügen => TODO: mal in umls_data.xml nachsehen
		//sabsDe.add("MSHGER");
		//sabsEn.add("MSH");
		//sabsEn.add("WHO");
		//sabsEn.add("");
		// Wenn der Vector ganz leer ist => Endlosschleife
		// hier wird dann wenn Englisch der englische vector genommen bzw deutsche
		// vecSabs= sabsEn; // das is jetzt der englische vector einfach.
		/* DOM = Document Object Model=> 
		 * Den Document teil verstehe ich noch nicht.
		 * */
		
	    
	}
}

Es gibt dann noch eine weitere Klasse (die RMI Klasse)

Code:
package rmi;
import java.io.*;

import gov.nih.nlm.kss.api.KSSRetrieverV5_0;
import gov.nih.nlm.kss.util.DatabaseException;

import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.Naming;
import java.util.Vector;

public class RMIClient
{

	protected PrintStream out = null;  // Testzwecke
	protected KSSRetrieverV5_0 objRetriever = null;
	protected String strRelease = null; //verwende immer aktuelle version
	protected String strHost = null;
	protected String strName = null;
	protected String strTerm = null;

	public RMIClient()
	{
		this.strHost = "umlsks.nlm.nih.gov";
		this.strName = "//umlsks.nlm.nih.gov/KSSRetriever";
		this.strRelease = null;
		//describeCurrentUMLSVersion
	}

	public void connectedUmlsks()
	{
        try {
        	this.objRetriever = (KSSRetrieverV5_0)Naming.lookup(strName);
	    	/* Liefert eine Referenz auf das Objekt,das unter dem Namen
	    	 * name bei der RMI-Registrierung registriert ist. Wenn kein
	    	 * Objekt unter diesem Namen registriert ist, wird eine Exception
	    	 * ausgelöst.
	    	 */
        	System.out.println("test");
		} catch (RemoteException rex) {
			// Wird ausgelöst, wenn keine Verbindung zur RMI-Registrierung aufgebaut werden kann.
			System.err.println("RemoteException: " + rex.getMessage());
			return;
		} catch (NotBoundException nbex) {
			// Wird ausgelöst, wenn unter dem angegeben Namen gerade kein Objekt bei der RMI-Registrierung registriert ist..
			System.err.println("NotBoundException: " + nbex.getMessage());
			return;
		} catch (MalformedURLException mfurl) {
			// Wird ausgelöst, wenn der angegebene Name keine gültige URL für RMI-Objekte darstellt..
			System.err.println("MalformedURLException: " + mfurl.getMessage());
			return;
		}
	}

	public String findCUI (String strSearchTerm, Vector vecSabs, String strLanguage, int intManipType)
  {
	System.out.println("Methodenaufruf findCUI ok");
	System.out.println("Term:"+strSearchTerm+",Vector:" +vecSabs.toString()+",Language:"+ strLanguage+ ",ManipType:"+ intManipType);
	    
    String strXml= null ;
    try
    {
    	System.out.println("Hänge vorm eigentlichen methodenaufruf?");
      long start = System.currentTimeMillis();
      char[] chrResult = objRetriever.findCUI(strRelease, strSearchTerm, vecSabs, strLanguage , intManipType, true);
      System.out.println("nein");
      strXml = new String(chrResult);
			System.out.println(strXml);
      long end = System.currentTimeMillis();
			long differenz = end - start;
			System.out.println( differenz+ " millisekunden");
			System.out.println(differenz/1000 + " sekunden");
   		} catch (DatabaseException ex) {
      			System.err.println("findCUI: DatabaseException-> " +
       					ex.getMessage());
   		} catch (RemoteException ex) {
   			System.out.println("testtest");
      			System.err.println("findCUI: RemoteException-> " +
       					ex.getMessage());
   		}
   		return strXml;
   	}

// wird eventuell nicht benötigt!
	public String getContext (String searchTerm)
  {
    String strXml=null;
    try
    {
      long start = System.currentTimeMillis();
      char[] result = objRetriever.getContext(strRelease, searchTerm, null);
      strXml = new String(result);
      long end = System.currentTimeMillis();
      long differenz = end - start;
      System.out.println("getContext:  "+differenz);
      } catch (DatabaseException ex) {
      		System.err.println("getContext: DatabaseException-> " + ex.getMessage());
   		} catch (RemoteException ex) {
      			System.err.println("getContext: RemoteException-> " +  ex.getMessage());
   		}
   		return strXml;
   	}

	public String findConcept (String strSearchTerm, Vector vecSabs, String strLanguage, int intManipType)
  {
	System.out.println("Methodenaufruf: findConcept ok");
	System.out.println("Term:"+strSearchTerm+",Vector:" +vecSabs.toString()+",Language:"+ strLanguage+ ",ManipType:"+ intManipType);
    String strXml= null ;
    try
    {
    	System.out.println("Hänge vorm eigentlichen methodenaufruf?");
      long start = System.currentTimeMillis();
      char[] chrResult = objRetriever.findConcept(strRelease, strSearchTerm, vecSabs, strLanguage , intManipType, true);
      System.out.println("nein");
      System.out.println(chrResult);
      strXml = new String(chrResult);
      long end = System.currentTimeMillis();
			long differenz = end - start;
			System.out.println( differenz+ " millisekunden");
			System.out.println(differenz/1000 + " sekunden");
   		} catch (DatabaseException ex) {
      			System.err.println("findConcept: DatabaseException-> " +
       					ex.getMessage());
   		} catch (RemoteException ex) {
      			System.err.println("findConcept: RemoteException-> " +
       					ex.getMessage());
   		} catch (NullPointerException ex) { //Grund fuer Fehler nicht bekannt
   				System.out.println("Hier ist also ein Fehler");
      			System.err.println("findConcept: NullPointerException-> " +
       					ex.getMessage());
      			
		}
   		return strXml;
   	}

	public void disconnectedUmlsks()
  {
		this.objRetriever= null;
	}
}

Ich bekomme nun beim Ausführen folgende Fehlermeldungen:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at rmi.RMIClient.findCUI(RMIClient.java:59)
	at UMLS_Test.runMethod(UMLS_Test.java:195)
	at UMLS_Test$6.actionPerformed(UMLS_Test.java:139)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Durch die printmessages lässt sich das Auftreten des Fehlers ganz gut lokalisieren.
In der RMI Klasse beim Aufruf von findCUI nach der print message:
Code:
System.out.println("Methodenaufruf findCUI ok");
aber vor der print message
Code:
	System.out.println("Term:"+strSearchTerm+",Vector:" +vecSabs.toString()+",Language:"+ strLanguage+ ",ManipType:"+ intManipType);
Bzw tritt der Fehler wohl durch die printmessage auf. Ich habe solche Unknown Source Fehler noch nie gesehen. Woran kann denn sowas liegen? ;(
 

Wildcard

Top Contributor
Es steht doch alles da:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at rmi.RMIClient.findCUI(RMIClient.java:59)
In RMIClient wird in Zeile 59 versucht null zu dereferenzieren.
Also in etwa so:
[HIGHLIGHT="Java"]Object foo = null;
foo.toString() //<--- hier[/HIGHLIGHT]
 

Don83

Bekanntes Mitglied
Peinlich, peinlich :oops:.
Der Fehler war ziemlich trivial. Habe anstelle des Strings "ENG" "EN" angegeben.:idea:
 

Ebenius

Top Contributor
Anmerkung: "Unknown Source" steht im StackTrace, weil keine Debuginformationen in den Klassen des JRE enthalten sind. Dies kann man beim Kompilieren einstellen. Sun macht es so, dass sie in den Klassen des JRE keine DebugInfos drin haben, in denen des SDK (alias JDK) sind die Informationen aber drin. Anstatt "Unknown Source" würde dann bspw. JButton.java:314 stehen. Die Quelltexte aller zur API gehörenden Klassen sind auch mit beim SDK dabei (src.zip im Installationsverzeichnis). Da kann man dann nachgucken, was genau nicht funktioniert hat. Also: Java SDK statt (oder zuzüglich zu) JRE installieren!

Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Fehlermeldungen bei Cancel FileChooser AWT, Swing, JavaFX & SWT 7
foobar Eclipse-RCP: Fehlermeldungen werden nicht angezeigt AWT, Swing, JavaFX & SWT 2
W Fehlermeldungen in JDialog AWT, Swing, JavaFX & SWT 5
J Fertige Fehlermeldungen AWT, Swing, JavaFX & SWT 2
H JavaFX Invalid URL: unknown protocol: d AWT, Swing, JavaFX & SWT 5
C JavaFX CSS Unknown Property AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
A Swing Unknown Source Fehler AWT, Swing, JavaFX & SWT 9
K Exception mit "Unknown Source" AWT, Swing, JavaFX & SWT 5
I MediaPlayer (MediaView) in FXML (source) AWT, Swing, JavaFX & SWT 0
L JavaFX GUI mit JavaFX. Scene Builder source code? AWT, Swing, JavaFX & SWT 6
L JavaFX Oracle Henry Sales Dashboard Source AWT, Swing, JavaFX & SWT 5
H Lust auf eine Open-Source Lösung für universelle Java Client-Technologie? AWT, Swing, JavaFX & SWT 11
R Source-Code, Javadoc AWT, Swing, JavaFX & SWT 16
W DocumentEvent source? AWT, Swing, JavaFX & SWT 3
L AWT Source eines ItemEvents AWT, Swing, JavaFX & SWT 7
0 Swing Drag n' Drop Bug wenn Source und Target gleiche Komponente? AWT, Swing, JavaFX & SWT 4
O Source Code für "javax.swing.JLabel" ? AWT, Swing, JavaFX & SWT 2
C open source JColorChooser? AWT, Swing, JavaFX & SWT 2
R eclipse source not found AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben