2

別の実行メソッドをオーバーライドしようとする実行メソッドがあります。しかし、メソッドを実行する前に「Class not found Exception」が発生しているため、発生していません。

これが run メソッドを使用した私のクラスです

これを実行メソッドにオーバーライドするにはどうすればよいですか。

実行するために呼び出さなければならないクラス。

    public abstract class MessageProcessor implements Runnable {
private Collection<KpiMessage> fetchedMessages;
private Connection dbConnection;
Statement st = null;
ResultSet rs = null;
PreparedStatement pstmt = null;
private Collection<KpiMessage> outgoingQueue;


public KpiMsg804 MessageProcessor(Collection<KpiMessage> outgoingQueue, Connection
 dbConnection){
    this.outgoingQueue = outgoingQueue;
    this.dbConnection = dbConnection;
    return (KpiMsg804) fetchedMessages;
}

    public Collection<KamMessage> generate(Collection<KamMessage> outgoingQueue)
   {
    while(true){
        try {

            while (rs.next()) {
                KamMessage filedClass = convertRecordsetToPojo(rs);
                outgoingQueue.add(filedClass);

            }

            for (KamMessage pojoClass : outgoingQueue) {
                KamMsg804 updatedValue = createKamMsg804(pojoClass);
                System.out.print(" " + pojoClass.getSequence());
                System.out.print(" " + pojoClass.getTableName());
                System.out.print(" " + pojoClass.getAction());
                System.out.print(" " + updatedValue.getKeyInfo1());
                System.out.print(" " + updatedValue.getKeyInfo2());
                System.out.println(" " + pojoClass.getEntryTime());
            }
            return outgoingQueue;

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

}

4

1 に答える 1

3

コードでは、クラス内に default-visibility フィールドを作成しており、run()メソッドをオーバーライドしていません。ただ固執する:

MessageProcessor processor = new MessageProcessor() {
  @Override
  final public void run() {
    MessageProcessor(outgoingQueue).generate(outgoingQueue);                    
  }
};

そして、外側のMessageProcessor宣言を削除します。

私はあなたのコードのサブセットを作りました:

public class PollingSynchronizer {
  public static void main(String[] args) {
    MessageProcessor message = new MessageProcessor() {
      MessageProcessor message = new MessageProcessor() {
        public void run() {
          System.out.println("new run");
        }
      };
    };

    new Thread(message).start();
  }
}

class MessageProcessor implements Runnable {
  public void run() { System.out.println("old run"); }
}

最初は実際には上書きされていないold runため、どちらが印刷されますか。MessageProcessor::run()

于 2013-01-18T12:15:42.003 に答える