Falha do applet java quando iniciado com o servidor “valor mágico incompatível 1013478509”

Estou tendo um problema com meu applet. Eu tenho um projeto da escola onde eu deveria fazer um jogo on-line pong. Ele funciona bem off-line, mas quando tento carregá-lo de um servidor, acabo de receber um quadro vazio com um texto em vermelho. quando clico no texto, recebo a mensagem:

valor mágico incompatível 1013478509

Estou usando jetty-all-8.1.8.v20121106.jar e servlet-api-3.0.jar

A class que inicializa o servidor é assim:

public class TheServer extends HttpServlet { private static final long serialVersionUID = 1L; private Scanner sc; private String webSite; private PrintWriter out; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html; charset=UTF-8"); resp.setStatus(HttpServletResponse.SC_OK); out = resp.getWriter(); sc = new Scanner(new File("F:\\Users\\Johan\\Workspace Kurs 5\\PongOnline\\bin\\pong.html")); webSite = ""; while(sc.hasNext()) webSite += sc.nextLine(); sc.close(); out.println(webSite); System.out.println(webSite); } public static void main(String...args) throws Exception { ServletContextHandler context = new ServletContextHandler( ServletContextHandler.SESSIONS); context.addServlet(TheServer.class, "/"); Server server = new Server(666); server.setHandler(context); server.start(); server.join(); } } 

De acordo com a especificação da linguagem Java , um arquivo .class apropriado é iniciado com o número mágico :

O item mágico fornece o número mágico que identifica o formato de arquivo de class; tem o valor 0xCAFEBABE.

Se você abrir qualquer arquivo .class compilado com um editor hexadecimal e inspecionar seus primeiros bytes, eles devem ser 0xCAFEBABE . 1013478509 em ASCII se traduz em .

Certifique-se de que você tenha a class compilada corretamente no servidor. E mais provavelmente, como o BalusC já apontou em sua resposta, certifique-se de que os URLs estejam corretos. Os bytes ... que você está obtendo podem ser um documento de erro de HTML servido pelo servidor.

O valor mágico de uma class Java válida é 0xCAFEBABE (o valor hexadecimal de 3405691582 ), que são os primeiros 4 bytes. Mas você está recebendo 0x3C68746D (o valor hexadecimal de 1013478509 ) que, por sua vez, representa os caracteres ASCII < , h , t e m . Para ver você mesmo, execute este trecho de código:

 int magic = 1013478509; ByteBuffer b = ByteBuffer.allocate(4); b.putInt(magic); System.out.println(new String(b.array())); 

Isso em combinação com o applet sendo servido por um site sugere que é o início de uma tag que por sua vez sugere que é um documento HTML.

Portanto, a solicitação HTTP para applet aparentemente retornou um documento HTML. Você mesmo poderá ver isso quando alterar o URI de solicitação atual na barra de endereço do navegador para apontar para o URL do applet. Então você verá o que o navegador realmente recuperou quando tentou baixar o applet. Talvez seja um simples documento de erro HTTP 404 no sabor de uma página HTML.

Para corrigi-lo, certifique-se de que o URL na tag ou esteja correto. É relativo ao URL de solicitação atual, como você vê na barra de endereços do navegador. A maneira como seu servlet funciona é bem estranha. Você está transmitindo um arquivo HTML de fora da pasta de implantação. Isso sugere que o applet também está fora da pasta deploy e, portanto, não pode ser acessado por um URL válido. Você deve colocar a página HTML e o applet na pasta de conteúdo da web. Dessa forma, você não precisa mais desse servlet.

Isso significa que você tem um arquivo com a extensão .class que não é uma class. Todas as classs devem começar com o número mágico de 0xCAFEBABE

Os primeiros quatro bytes da sua “class” são lidos

 System.out.println(new String(BigInteger.valueOf(1013478509).toByteArray())); 

impressões

  

então eu suspeito que seja um arquivo HTML.

    Intereting Posts