首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java NoClassDefFoundError amf

Java NoClassDefFoundError amf
EN

Stack Overflow用户
提问于 2017-07-18 20:35:51
回答 1查看 479关注 0票数 2

我试图将一个java代码片段编译成jar文件,我遇到了一个典型的java运行时异常,但我无法解决这个问题。这是从Markus Wulftange借来的代码:

代码语言:javascript
复制
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;

import flex.messaging.io.SerializationContext;
import flex.messaging.io.amf.ActionContext;
import flex.messaging.io.amf.ActionMessage;
import flex.messaging.io.amf.AmfMessageDeserializer;
import flex.messaging.io.amf.AmfMessageSerializer;
import flex.messaging.io.amf.MessageBody;

public class Amf3ExternalizableUnicastRef {

public static void main(String[] args) throws IOException, ClassNotFoundException {
    if (args.length < 2 || (args.length == 3 && !args[0].equals("-d"))) {
        System.err.println("usage: java -jar " + Amf3ExternalizableUnicastRef.class.getSimpleName() + ".jar [-d] <host> <port>");
        return;
    }
    boolean doDeserialize = false;
    if (args.length == 3) {
        doDeserialize = true;
        args = Arrays.copyOfRange(args, 1, args.length);
    }

    // generate the UnicastRef object
    Object unicastRef = generateUnicastRef(args[0], Integer.parseInt(args[1]));

    // serialize object to AMF message
    byte[] amf = serialize(unicastRef);

    // deserialize AMF message
    if (doDeserialize) {
        deserialize(amf);
    } else {
        System.out.write(amf);
    }
}

public static Object generateUnicastRef(String host, int port) {
    java.rmi.server.ObjID objId = new java.rmi.server.ObjID();
    sun.rmi.transport.tcp.TCPEndpoint endpoint = new sun.rmi.transport.tcp.TCPEndpoint(host, port);
    sun.rmi.transport.LiveRef liveRef = new sun.rmi.transport.LiveRef(objId, endpoint, false);
    return new sun.rmi.server.UnicastRef(liveRef);
}

public static byte[] serialize(Object data) throws IOException {
    MessageBody body = new MessageBody();
    body.setData(data);

    ActionMessage message = new ActionMessage();
    message.addBody(body);

    ByteArrayOutputStream out = new ByteArrayOutputStream();

    AmfMessageSerializer serializer = new AmfMessageSerializer();
    serializer.initialize(SerializationContext.getSerializationContext(), out, null);
    serializer.writeMessage(message);

    return out.toByteArray();
}

public static void deserialize(byte[] amf) throws ClassNotFoundException, IOException {
    ByteArrayInputStream in = new ByteArrayInputStream(amf);

    AmfMessageDeserializer deserializer = new AmfMessageDeserializer();
    deserializer.initialize(SerializationContext.getSerializationContext(), in, null);
    deserializer.readMessage(new ActionMessage(), new ActionContext());
  }
}    

使用位于同一目录中的flex-messaging-core包,我使用javac -cp flex...jar sourcefile.java.将其编译成jar

然后用jar -cfm myjar.jar MANIFEST.ML myclass.class编译成jar。

但是,当使用适当的参数从java -jar myjar.jar -d 127.0.0.1 8000运行时,它会在threadmain java.lang.NoClassDefFoundError : flex/messaging/io/amf/MessageBody中抛出一个异常。

我在谷歌上搜索并尝试了两天所有的解决方案,但我真的不能自己解决这个问题,我可以请求一点帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-06 04:37:09

不应该是MANIFEST.MF,而不是MANIFEST.ML吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45167006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档