Java Android Jetty致命异常
我正在使用Jetty开发Android web服务器。有两个文件:MainActivity.java和Servlet.java,其中包含我的主服务器类ExampleServlet。文件如下所示: Servlet.javaJava Android Jetty致命异常,java,android,jetty,Java,Android,Jetty,我正在使用Jetty开发Android web服务器。有两个文件:MainActivity.java和Servlet.java,其中包含我的主服务器类ExampleServlet。文件如下所示: Servlet.java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSer
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.http.HttpStatus;
class ExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(HttpStatus.OK_200);
resp.getWriter().println("Hello World");
}
}
package com.example.joey.myproject;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import com.example.joey.myproject.ExampleServlet;
import javax.servlet.Servlet;
public class MainActivity extends AppCompatActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Server server = new Server(7070);
ServletContextHandler handler = new ServletContextHandler(server, "/example");
handler.addServlet(ExampleServlet.class, "/");
try {
server.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
MainActivity.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.http.HttpStatus;
class ExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(HttpStatus.OK_200);
resp.getWriter().println("Hello World");
}
}
package com.example.joey.myproject;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import com.example.joey.myproject.ExampleServlet;
import javax.servlet.Servlet;
public class MainActivity extends AppCompatActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Server server = new Server(7070);
ServletContextHandler handler = new ServletContextHandler(server, "/example");
handler.addServlet(ExampleServlet.class, "/");
try {
server.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
当我安装APK并运行时,应用程序正在崩溃。我在logcat上得到这个错误:
08-28 10:07:02.869 29531-29531/com.example.joey.myproject E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.ExceptionInInitializerError
at org.eclipse.jetty.server.HttpConfiguration.<init>(HttpConfiguration.java:61)
at org.eclipse.jetty.server.HttpConnectionFactory.<init>(HttpConnectionFactory.java:40)
at org.eclipse.jetty.server.ServerConnector.<init>(ServerConnector.java:96)
at org.eclipse.jetty.server.Server.<init>(Server.java:113)
at com.example.joey.myproject.MainActivity.onCreate(MainActivity.java:125)
at android.app.Activity.performCreate(Activity.java:5247)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2225)
at android.app.ActivityThread.access$600(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1301)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5071)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoClassDefFoundError: java.nio.charset.StandardCharsets
at org.eclipse.jetty.util.BufferUtil.toBuffer(BufferUtil.java:850)
at org.eclipse.jetty.http.HttpScheme.<init>(HttpScheme.java:52)
at org.eclipse.jetty.http.HttpScheme.<clinit>(HttpScheme.java:32)
at org.eclipse.jetty.server.HttpConfiguration.<init>(HttpConfiguration.java:61)
at org.eclipse.jetty.server.HttpConnectionFactory.<init>(HttpConnectionFactory.java:40)
at org.eclipse.jetty.server.ServerConnector.<init>(ServerConnector.java:96)
at org.eclipse.jetty.server.Server.<init>(Server.java:113)
at com.example.joey.myproject.MainActivity.onCreate(MainActivity.java:125)
at android.app.Activity.performCreate(Activity.java:5247)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2225)
at android.app.ActivityThread.access$600(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1301)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5071)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
08-28 10:07:02.869 29531-29531/com.example.joey.myproject E/AndroidRuntime:FATAL EXCEPTION:main
java.lang.ExceptionInInitializeError
位于org.eclipse.jetty.server.HttpConfiguration(HttpConfiguration.java:61)
位于org.eclipse.jetty.server.HttpConnectionFactory(HttpConnectionFactory.java:40)
位于org.eclipse.jetty.server.ServerConnector(ServerConnector.java:96)
位于org.eclipse.jetty.server.server(server.java:113)
位于com.example.joey.myproject.MainActivity.onCreate(MainActivity.java:125)
位于android.app.Activity.performCreate(Activity.java:5247)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2225)
在android.app.ActivityThread.access$600(ActivityThread.java:151)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1301)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:153)
位于android.app.ActivityThread.main(ActivityThread.java:5071)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.NoClassDefFoundError:java.nio.charset.StandardCharsets
位于org.eclipse.jetty.util.BufferUtil.toBuffer(BufferUtil.java:850)
http.HttpScheme.(HttpScheme.java:52)
http.HttpScheme.(HttpScheme.java:32)
位于org.eclipse.jetty.server.HttpConfiguration(HttpConfiguration.java:61)
位于org.eclipse.jetty.server.HttpConnectionFactory(HttpConnectionFactory.java:40)
位于org.eclipse.jetty.server.ServerConnector(ServerConnector.java:96)
位于org.eclipse.jetty.server.server(server.java:113)
位于com.example.joey.myproject.MainActivity.onCreate(MainActivity.java:125)
位于android.app.Activity.performCreate(Activity.java:5247)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2225)
在android.app.ActivityThread.access$600(ActivityThread.java:151)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1301)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:153)
位于android.app.ActivityThread.main(ActivityThread.java:5071)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
在dalvik.system.NativeStart.main(本机方法)
我该怎么办?我猜您是在低于7的jvm中运行代码,该jvm不包含Java nio包 因此,您必须将jvm升级到Java1.7或更高版本
谢谢您的回复。我的Java版本是8更新171。制造编号1.8.0_171-b11。这是你提到的吗?@external_peace你确定这是你在运行时使用的版本吗?我从安装在我电脑上的“关于Java”程序中获得了这些信息。它与运行时不同吗?或者如何在我的Android 4.1.2 phonesee上获得运行时版本。看起来android在这个版本中使用了java6