簡體   English   中英

Servlet 異常:方法拋出“java.lang.NoClassDefFoundError”

[英]Servlet exception : Method threw 'java.lang.NoClassDefFoundError'

我正在使用這個庫: https : //github.com/bertrandmartel/speed-test-lib on my Java EE Maven Project

我收到以下異常java.lang.ClassNotFoundException: fr.bmartel.speedtest.inter.ISpeedTestListener from [Module "deployment.vp_speedometer_war_exploded.war:main" from Service Module Loader]

我創建了這個類:

 public class SpeedTest {

    public SpeedTest() {
        speedTestSocket = new SpeedTestSocket();
    }

    public void start() {
        //set timeout for download
        speedTestSocket.setSocketTimeout(SOCKET_TIMEOUT);

        // add a listener to wait for speed examples completion and progress
        speedTestSocket.addSpeedTestListener(new ISpeedTestListener() {
            public void onProgress(final float percent, final SpeedTestReport downloadReport) {
                transfertRateBitSecond = downloadReport.getTransferRateBit(); // + " bit/second";
            }
        });

        speedTestSocket.startDownload(SPEED_TEST_SERVER_URI_DL);
    }

我的 Servlet 看起來像:

public class Servlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();

        SpeedTest speedTest = new SpeedTest();
        speedTest.start();

        session.setAttribute("nbr", speedTest.getTransfertRateBitSecond());
        response.sendRedirect("index.jsp");
    }
}

它在SpeedTest speedTest = new SpeedTest();處拋出異常SpeedTest speedTest = new SpeedTest(); 但我找不到如何解決它...

root cause

java.lang.NoClassDefFoundError: fr/bmartel/speedtest/inter/ISpeedTestListener
    ctrl.Servlet.doGet(Servlet.java:22)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

root cause

java.lang.ClassNotFoundException: fr.bmartel.speedtest.inter.ISpeedTestListener from [Module "deployment.vp_speedometer_war_exploded.war:main" from Service Module Loader]
    org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
    org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
    org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
    ctrl.Servlet.doGet(Servlet.java:22)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

謝謝你的幫助


編輯

這是我的 pom.xml

<groupId>ch</groupId>
<artifactId>speedometer</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>
    <!-- https://github.com/bertrandmartel/speed-test-lib -->
    <dependency>
        <groupId>fr.bmartel</groupId>
        <artifactId>jspeedtest</artifactId>
        <version>1.32.1</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <webXml>web\WEB-INF\web.xml</webXml>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

當我構建項目時,在“war”中有我的“jspeedtest-1.13.1.jar”庫。 沒關系

ISpeedTestListener是一個接口 ,您需要實現它的所有方法:

speedTestSocket.addSpeedTestListener(new ISpeedTestListener() {

        @Override
        public void onCompletion(SpeedTestReport report) {
            // do nothing
        }

        @Override
        public void onError(SpeedTestError speedTestError, String 
          errorMessage) {
            // do nothing
        }

        @Override
        public void onProgress(float percent, SpeedTestReport report) {
            transfertRateBitSecond = downloadReport.getTransferRateBit(); // + " bit/second";

        }
  });

我覺得這個問題正在取得進展。 當我嘗試訪問我的應用程序時,我得到了這個......

  13:04:21,652 WARN  [org.jboss.modules] (MSC service thread 1-15) Failed to define class ctrl.Servlet in Module "deployment.speedometer-1.0-SNAPSHOT.war:main" from Service Module Loader: java.lang.UnsupportedClassVersionError: ctrl/Servlet : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.7.0_79]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) [rt.jar:1.7.0_79]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [rt.jar:1.7.0_79]
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:327)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM