2014-03-02 61 views
0

我想導入並列出eclipse中的語義web(owl)文件的類。我是日食新手,因此我可能會犯簡單的錯誤,但在我的立場並不那麼簡單。在整個研究過程中,我發現了一個我在日食中使用的代碼。我在public void testAddAxioms()上遇到了一個錯誤,具體在void上。代碼如下:基本的java語法

public static void main(String[] args) { 
    File file = new File("file:c:/Users/DTN/Desktop/Final SubmissionFilteringMechanism_Ontology.owl"); 
    OWLOntologyManager m = OWLManager.createOWLOntologyManager(); 
    OWLDataFactory f = OWLManager.getOWLDataFactory(); 
    OWLOntology o = null; 

    public void testAddAxioms() { 
     try { 
      o = m.loadOntologyFromOntologyDocument(Ont_Base_IRI); 
      OWLClass clsA = f.getOWLClass(IRI.create(Ont_Base_IRI + "ClassA")); 
      OWLClass clsB = f.getOWLClass(IRI.create(Ont_Base_IRI + "ClassB")); 
      OWLAxiom ax1 = f.getOWLSubClassOfAxiom(clsA, clsB); 
      AddAxiom addAxiom1 = new AddAxiom(o, ax1); 
      m.applyChange(addAxiom1); 

      for (OWLClass cls : o.getClassesInSignature()) { 
       EditText edit = (EditText) findViewById(R.id.editText1); 
       edit.setText((CharSequence) cls); 
      } 

      m.removeOntology(o); 
     } catch (Exception e) { 
      EditText edit = (EditText) findViewById(R.id.editText1); 
      edit.setText("Not successfull"); 
     } 
    } 
} 
+0

你的主要方法不能有'void'。 – hichris123

+3

編譯器抱怨是因爲你試圖在主要方法中定義你的「public void testAddAxioms」方法。在Java中,方法不會嵌套。 –

+0

Java不支持「直接」嵌套方法 – vidit

回答

3

您不能在另一個方法中聲明一個方法。這基本上是你在main裏面做的。

移動你的testAddAxioms聲明main之外,因爲這樣的:

public static void main(String[] args) { 
    // code omitted for brevity 
} 

public void testAddAxioms() { 
    // code omiited for brevity 
} 
1

要呼叫您的testAddAxioms()方法,你需要先聲明它的main()方法之外。它可以在同一班,也可以在一個新班上。

public class YourClass { 
    public static void main(String[] args) { 
     File file = new File("..."); 
     OWLOntologyManager m = OWLManager.createOWLOntologyManager(); 
     OWLDataFactory f = OWLManager.getOWLDataFactory(); 
     OWLOntology o = null; 

     // removed your method from here 
    } 

    public void testAddAxioms() { 
     ... 
    } 
} 

要調用它(從那裏你已經把它同一個地方),你將不得不改變其聲明接受你發送給它的類型:

public void testAddAxioms(OWLOntology o, OWLOntologyManager m, OWLDataFactory f) { ...} 

,然後在你的main()方法,實例化你的類的一個對象來調用它。

YourClass obj = new YourClass(); 
obj.testAddAxioms(o, m, f); 

另一種方式來調用它正在申報方法靜態:

public static void testAddAxioms(OWLOntology o, OWLOntologyManager m, OWLDataFactory f) { ...} 

那麼你不需要創建任何對象,並且可以簡單地調用:

testAddAxioms(o, m, f); 

但你應仔細檢查您的代碼。您聲明File file但未使用它。當初始化傳遞給方法的對象時,可能需要將它傳遞給某個方法或構造函數。如果你在方法內部需要它,你將不得不添加一個額外的參數。