【问题标题】:Running a Thread inside a thread, " Class exception error "在线程内运行线程,“类异常错误”
【发布时间】:2013-01-18 12:02:41
【问题描述】:

我有一个运行方法,它试图覆盖另一个运行方法。但它没有发生,因为在它传递给运行方法之前我得到了一个“找不到类的异常”。

这是我的带有 run 方法的课程

我怎样才能超越 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();
        }

    }

}

}

【问题讨论】:

  • 向我们展示完整的堆栈跟踪。
  • 你定义了MessageProcessor类吗?
  • 类路径中有MessageProcessor类吗?
  • @Madhusuthanan Seetharaman 是的,它在类路径中,,我的任务是在主线程休眠 3 秒时运行第二个线程,但我的执行甚至没有窥视消息处理器类...捕获异常 e1...
  • @pap ya 我已经声明请检查我的更新

标签: java multithreading class methods queue


【解决方案1】:

在您的代码中,您正在类中创建一个默认可见性字段,而不是覆盖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() 并没有真正被覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2015-04-15
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    相关资源
    最近更新 更多