2015-09-04 37 views
-1

我需要生成兩個單獨的jar文件,它們都相互交互,但做不同的事情。我有兩個項目加載到Eclipse中,但都使用了很多相同的導入,因此我將它們放在同一個工作空間下的子文件夾中。Eclipse讓我做這個摘要?

其中一人得到"java class xxxx找不到」當我嘗試運行它。

當我試圖解決這個問題,我是比較兩個項目,發現一個文件夾是外部構建路徑的一部分但不是非工作的,我把它添加到非工作的工作中,並且打破了工作中的一個

現在工作的那個主類名稱有錯誤我打電話程序ZSTATEngine,等級爲

public class ZSTATEngine implements ETOSFilterEngine 

現在這個名字被突出顯示,當我將鼠標懸停時,它說:"the type ZSTATEngine必須實現繼承的抽象方法ETOSFilterEngine.doFilter(MessageBlock)"

什麼可以改變?它之前工作正常,代碼本身沒有任何改變。我不明白引用的庫是如何工作的,但至少在以前的工作項目中,它們的結構沒有任何變化。

好了一些進一步的信息:我的確有一個類中的一個部分:

public MessageBlock doFilter(MessageBlock msgBlock) 

所以我採取那個方法......但這種方法現在有它內部的錯誤,

「在類型FilterFramework的方法addFilteredMessage(MessageBlock)不適用或參數(MessageBlock)...

怎麼可能那已經變糟了?它工作也很好。

下面是完整的代碼:

package com.ibm.tpf.internal; 

import java.awt.Color; 
/*import java.util.ArrayList;*/ 
/*import java.util.*;*/ 

import com.ibm.tpf.etos.TPFFilter.*; 
//import com.ibm.tpf.etos.TPFFilter.TernarySwitch; 

import com.ibm.tpf.etos.api.*; 
/* 
import com.ibm.tpf.etos.api.Constants; 
import com.ibm.tpf.etos.api.MessageBlock; 
*/ 
import com.ibm.tpf.etos.filter.*; 
/* 
import com.ibm.tpf.etos.filter.ETOSFilterEngine; 
import com.ibm.tpf.etos.filter.FilterConfigurationException; 
import com.ibm.tpf.etos.filter.FilterFramework; 
import com.ibm.tpf.etos.filter.FilterRuntimeException; 
*/ 

public class ZSTATEngine implements ETOSFilterEngine { 
    FilterFramework fw = null; 
    String[] names = null; 

    public ZSTATEngine(FilterFramework filFW, String[] parms) { 
     super(); 
     this.fw = filFW; 
    } 

    /* AAES0009I 13.45.01 FROM TA 05 : AUTC0000I TOSFCOLOR_GREEN TOSBCOLOR_NONE TOSHOLD_0 TOSSAVE_0 TOSALERT_0 AUTC1111I 12.04.41 OK */ 
    public MessageBlock doFilter(MessageBlock msgBlock) throws FilterRuntimeException { 
     if(msgBlock.getMsgID().equals("AAES0009I")) { /* only handle messages that start with AAES0009I */ 
      if(msgBlock.getMsg().indexOf("ZUVRT") != -1) { /* if the message contains "ZUVRT" then let it through. We want to react to the result of it, not the ZUVRT itself. */ 
       return msgBlock; 
      } 
      if(msgBlock.getMsg().indexOf("AUTC0000I") != -1) {  /* search string to see if "AUTC0000I is in it. If it is then do..." */ 
       String myString = msgBlock.getMsg(); 
       Color fColor = Color.WHITE;       /* set default colors */ 
       Color bColor = Color.BLACK; 
       msgBlock.setSuppressed(TernarySwitch.ON);    /* suppress original message to display new one */ 
       String[] myStringParts = myString.split("\\s+",13); /* divide message into 13 parts. The 13th part is everything remaining. */ 
       String finalPart = myStringParts[12].toString();  /* print last part to the screen */ 
       MessageBlock mb = new MessageBlock(finalPart, Constants.ETOS_ONE_MSG); 
       String fColorMsg  = myStringParts[7].toString(); /* Process the foreground color portion */ 
       if (!fColorMsg.contains("NONE")) { 
        fColor = ColorStringInterpreter(fColorMsg); 
        mb.setForeground(fColor); 
       } 
       String bColorMsg  = myStringParts[8].toString(); /* Process the background color portion */ 
       if (!bColorMsg.contains("NONE")) { 
        bColor = ColorStringInterpreter(bColorMsg); 
        mb.setBackground(bColor); 
       } 
       String holdMsg = myStringParts[9].toString();   /* Process the hold message portion */ 
       if (holdMsg.toUpperCase().startsWith("TOS")) {  /* if it starts with TOS, grab only the number at the end */ 
        String[] holdPart = holdMsg.split("_",2); 
        if (holdPart[1].toString().equals("1")) { 
         mb.setHeld(TernarySwitch.ON); 
        } 
       } 
       else { 
        if (holdMsg.equals("1")) {      /* otherwise, just use the number */ 
         mb.setHeld(TernarySwitch.ON); 
        } 
       } 
       String saveMsg = myStringParts[10].toString();  /* Process the save areas. These have two formats currently: TOSSAVE_X_X_X_X and BBBBBBBBB, where X is a digit 1-32, and B is binary. */ 
       if (saveMsg.toUpperCase().startsWith("TOS")) {   
        String[] savePart = saveMsg.split("_");   /* handle the multiple digit save areas, and ignore the first split which is TOSSAVE */ 
        if (!savePart[1].toString().equals("0")) { 
         long areaBits = 0; 
         for (int i=1; i<savePart.length; i++) { 
          areaBits |= 1L << Integer.parseInt(savePart[i]); 
         } 
         mb.setSave(areaBits); 
        } 
       } 
       else {            /* otherwise, just use the binary string directly */ 
        long areaBits = Long.parseLong(myStringParts[10].toString(), 2); 
        mb.setSave(areaBits); 
       } 
       fw.addFilteredMessage(mb);       /* this is the command that pieces the whole message together */ 
      } 
     } 
     int plusLocation = msgBlock.getMsg().lastIndexOf('+'); 
     if (plusLocation > 0) { 
      MessageBlock mb1 = new MessageBlock(msgBlock.getMsg(), msgBlock.getFlag()); 
      fw.addFilteredMessage(mb1); 
      msgBlock.setSuppressed(TernarySwitch.ON); 
      MessageBlock mb2 = new MessageBlock("", Constants.ETOS_ONE_MSG); 
      fw.addFilteredMessage(mb2); 
     } 
     return msgBlock;            /* whatever gets returned is what the system prints */ 
    } 

    private Color ColorStringInterpreter(String colorMsg) throws FilterRuntimeException { 
     if (colorMsg.toUpperCase().startsWith("TOS")) {    /* if it starts with TOS, then we're using color names */ 
      String[] colorParts = colorMsg.split("_",2); 
      String colorTxt  = colorParts[1].toString().trim(); 
      if (colorTxt.toUpperCase() != "NONE") { 
       Color finalColor = Colors.fromString(colorTxt); 
       return finalColor; 
      } 
     } 
     else { 
      String[] colorParts = colorMsg.split("_",3);   /* otherwise we're using RGB values */ 
      String sRed = colorParts[0].toString().trim(); 
      String sGreen = colorParts[1].toString().trim(); 
      String sBlue = colorParts[2].toString().trim(); 
      /*mb = new MessageBlock(sRed, Constants.ETOS_ONE_MSG);*/ 
      int iRed = Integer.parseInt(sRed); 
      int iGreen = Integer.parseInt(sGreen); 
      int iBlue = Integer.parseInt(sBlue); 
      Color finalColor = new Color (iRed, iGreen, iBlue); 
      return finalColor; 
     } 
     return null; 
    } 

    public String getName() { 
     return null; 
    } 

    public void modifyState(Object[] newParams) throws FilterConfigurationException, FilterRuntimeException { 
    } 

    public boolean isActive() { 
     return false; 
    } 

    public void shutdown() { 
    } 
} 
+0

更改原來的問題,以添加更多信息 – TulsaNewbie

+2

您的謾罵正在理解您的問題 – ControlAltDel

+0

也許你有兩個版本的ETOSFilterEngine,並且更改後,Eclipse鏈接到另一個版本。 –

回答

1

正如「Jakub Zaverka」提到的那樣,您可能在類路徑或構建路徑中有兩個版本。檢查jar命令,是否選擇正確的類......即使沒有代碼發生更改,也會發生。

找到它的一種方法是,只需在ETOSFilterEngine上執行一個F3,然後在包資源管理器中單擊「帶編輯器的鏈接」選項即可。它將顯示.class文件和它從中拾取的jar。如果它來自錯誤的jar或舊jar,只需進入Project> Properties> Build Path> Order and Export,然後將正確jar的順序更改爲頂部,通過點擊頂部按鈕..

+0

做到了!感謝你真正聽我說的話,並找出它出了什麼問題。我簡單地將罐子重新排列到頂部,所有錯誤都消失了。 – TulsaNewbie

2
public class ZSTATEngine implements ETOSFilterEngine 

根據上面的代碼,你的類ZSTATEngine正在實施的接口ETOSFilterEngine,這意味着你的類需要實現ETOSFilterEngine的所有抽象方法。

Java doc

接口形成類和外部世界, 之間的合同,這份合同是由編譯器在編譯時執行。如果 類宣稱實現一個接口,那麼在該類將 成功編譯之前,該接口定義的所有方法都必須出現在其源代碼中。

檢查鏈接:http://www-01.ibm.com/support/knowledgecenter/SSB23S_1.1.0.9/com.ibm.tpfops.doc_1112/aaeo1/fengapi.html?cp=SSB23S_1.1.0.9%2F2-3-10-3

以下是5種方法中存在的ETOSFilterEngine,你需要實現。

public MessageBlock doFilter (MessageBlock) throws 
      FilterRuntimeException; 
    public void modifyState (Object[ ]) throws 
      FilterConfigurationException, 
      FilterRuntimeException; 
    public boolean isActive(); 
    public void shutdown(); 
    public String getName(); 

上面的鏈接對如何正確地實現這個接口的代碼示例。您可以看到示例中的類ZSTATEngine正在實現ETOSFilterEngine提供的所有5種方法。

檢查MessageBlock在你的進口類型,它應該是進口 com.ibm.tpf.etos.api.MessageBlock;我可以看到你評論你的導入是錯誤的。

取消註釋該行:import com.ibm.tpf.etos.api.MessageBlock;

+1

這可能是真的,但是......在此之前它運行良好,代碼沒有改變。 – TulsaNewbie

+0

檢查我的編輯特別是最後2行:-) –

+0

取消註釋此行:「import com.ibm.tpf.etos.api.MessageBlock;」 –

相關問題