有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法在java上找到或加载主类

我有以下代码,我正在尝试创建到数据库的连接。 运行命令时,出现错误“无法在java上找到或加载主类:java-cp”。onjava

我能够在Java上运行javac-classpath“C:\CATALINA\u HOME\lib*”。java命令 我的两个儿子都是。上课和上课。java文件位于同一目录WEB-INF\classes\com\onjava中

onjava。java

package com.onjava;
import java.sql.*;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.*;

import javax.naming.Context;

public class onjava extends HttpServlet {

  private DataSource datasource;

  public void init(ServletConfig config) throws ServletException {
    try {
      // Look up the JNDI data source only once at init time
      Context envCtx = (Context) new InitialContext().lookup("java:comp/env");
      datasource = (DataSource) ((InitialContext) envCtx).lookup("jdbc/testdb");
    }
    catch (NamingException e) {
      e.printStackTrace();
    }
  }

  private Connection getConnection() throws SQLException {
    return datasource.getConnection();
  }

  public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException {
    Connection connection=null;
    try {
      connection = getConnection();
      //..<do JDBC work>..
      if (connection != null) {

            String message = "You are connected!";
            System.out.println(message);


        } else {
            System.out.println("Failed to make connection!");
        }
    } 
    catch (SQLException sqlException) {
      sqlException.printStackTrace();
    }
    finally {
      if (connection != null) 
        try {connection.close();} catch (SQLException e) {}
      }
    }
  }

编辑:

我更改了代码并添加了public类。但是当我运行它时,我面临着同样的错误

package src;

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Wrapper;
import java.util.Hashtable;
import java.util.Properties;
import java.io.*;
import javax.activation.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import oracle.jdbc.pool.OracleDataSource;

public class onjava {

    public static void main(String[] argv) throws SQLException, NamingException {

        Properties prop = new Properties();
        System.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.apache.naming.java.javaURLContextFactory");
        Context initialContext = new InitialContext(prop);
        if ( initialContext == null){
              System.out.print("JNDI problem. Cannot get InitialContext.");
        } else {System.out.print("NO JNDI problemb ");}

        // Get DataSource
        Context envContext = (Context)initialContext.lookup("java:/comp/env");
        DataSource ds = (DataSource)envContext.lookup("jdbc/testdb");



        System.out.println("\n -------- Oracle JDBC Connection Testing ------");

        try {



            Connection jdbcConnection = ((Statement) ds).getConnection();
            OracleDataSource ods = ((Wrapper) ds).unwrap(OracleDataSource.class);
            jdbcConnection.close();

        } catch (SQLException e) {

            System.out.println("Connection Failed! Check output console");
            e.printStackTrace();
            return;

        }

        String message = "You are connected!";
        System.out.println(message);

    }

}

共 (2) 个答案

  1. # 1 楼答案

    当像这样运行java时,需要显式地声明主类。您的命令应该看起来更像java -cp . com.onjava.onjava。但是,我也没有看到这个类中的main方法。您需要指向main方法(即签名public static void main()

    顺便说一句,给类命名以大写字母(Onjava)开头是合适的约定

  2. # 2 楼答案

    根据你告诉我的,你需要在你的项目中附加一个主类。这意味着返回编译器并创建main方法。要添加代码,您需要在主类中执行类似的操作,我将其称为onjavaMain

    public class onjavaMain{
    
    //Main method is this
    public static void main(String[] args)
           {
           //create variable of your onjava class
           onjava onJavaConnectToDatabase = new onjava();
           onJavaConnectToDatabase.doGet(argument1,argument2);
           }
    }
    

    现在,这不是完整的答案,但这将让您了解在命令行中运行项目需要做些什么