在现有的新成员方法中添加新成员方法之后,我面临以下问题class Response implements Serializable{}.没有声明显式的串行版本ID.多次尝试,我得到相同的序列号.
Error communicating with the webserver: com.abc.xyz.app.util.common.Response;
local class incompatible: stream classdesc serialversionUID =
-3900355805473150430, local class serialversionUID =
-6706527232726476603
Run Code Online (Sandbox Code Playgroud)
经过一些文档后,我尝试修改class Response附加行:private final static long serialVersionUID = 1L;.
通过此更改,以下是错误:
Error communicating with the webserver: com.abc.xyz.app.util.common.Response;
local class incompatible: stream classdesc serialversionUID =
-3900355805473150430, local class serialversionUID = 1
Run Code Online (Sandbox Code Playgroud)
这些是位于webappstomcat文件夹中并xyz.jnlp在客户端计算机上加载的类.xyz.jnlp从远程网络服务器加载新客户机.但事情不起作用!
请帮我理解这个问题.
可能重复:
我为什么要打扰serialVersionUID?
我正在使用一个实现Serializable的类.Eclipse给了我一个"No Serial UID"警告,但编写和阅读该类工作正常.我想知道具有UID的Serializable类的目的是什么?这只是一种良好的做法,还是我的班级最终没有它会有效?可以是任何数字吗?
我对serialVersionUID感到困惑,有人告诉我,如果我没有定义serialVersionUID,它会影响性能,所以我需要总结我对此的了解
据我了解,在Java编译器中,如果您需要在2个类之间进行通信,或者您需要在1个任务到1个任务之间使用对象通信。当发送者发送对象时,应该在发送者和接收者中生成serialVersionUID,然后将serialVersionUID放入对象中,然后接收验证对象是否正确,接收者将继续该过程,如果不正确,则会抛出异常
所以如果我没有放置serialVersionUID,那么根据我的理解,java编译器将在运行时定义它,所以我认为它不会影响Java执行时的性能
我希望我的理解应该是正确的如果不是请帮助本网站的另一位提出建议
谢谢
我不能使pack()方法工作.我尝试了几件事.我的代码目前看起来像这样:
第1类:
public static void main( String[] args )
{
java.awt.EventQueue.invokeLater(new Runnable() {
public void run()
{
JavaGui mygui = new JavaGui();
// mygui.setSize(1154, 753);
mygui.setVisible(true);
mygui.pack();
Run Code Online (Sandbox Code Playgroud)
第2类:
public class JavaGui extends javax.swing.JFrame
{
public JavaGui()
{
getContentPane().setLayout(null);
..
getContentPane().add(panelLeft);
...
getContentPane().add(panelRight);
Run Code Online (Sandbox Code Playgroud)
我尝试将pack方法放在任何地方,但它不能用这种方式添加gui元素.有什么建议吗?我也尝试将所有内容添加到JFrame而不是getContentPane(),但我也无法做到这一点.
我遇到串行版本ID不匹配的问题。
我的服务器的序列号为serialVersionID = 20150301L; 和myt客户代码有所不同,因此手动进行了更改,但仍然面临相同的问题。
错误:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.io.InvalidClassException: com.fedex.supplies.j2ee.common.client.reqresp.CustomerDataRequest; local class incompatible: stream classdesc serialVersionUID = 20150901L, local class serialVersionUID = -955959537118369236.
Run Code Online (Sandbox Code Playgroud)
我尝试了像实现与服务器一样的可serializable,手动定义的serialVersionID之类的选项,但每次都得到相同的错误。
我想将我的问题改为以下内容:
我有一个HashMap对象,一个int.我想序列化到同一个文件并返回.我知道我应该按照与序列化相同的顺序进行反序列化.
请向我提供执行该操作的代码.
我有一个语法错误,一行与serialVersionUID.要修复此错误,我必须在该行的末尾放置一个括号,并在我的代码末尾关闭它...我的问题是为什么?在包含Jframe的文件中没有必要这个...还有什么是serialVersionUID?我很抱歉,如果我的问题看起来很简单,我是编程的新手,对Java更新,这是我在GUI上的3天.
import javax.swing.*;
public class HangmanPanel extends JPanel{
private static final long serialVersionUID = -1767262708330188227L;{
this.setLayout(null);
JLabel heading = new JLabel("Welcome to the Hangman App");
JButton Button = new JButton("Ok");
//get input
JLabel tfLable = new JLabel("Please Enter a Letter:");
JTextField text = new JTextField(10);
heading.setSize(200, 50);
tfLable.setSize(150, 50);
text.setSize(50, 30);
Button.setSize(60, 20);
heading.setLocation(300, 10);
tfLable.setLocation(50, 40);
text.setLocation(50, 80);
Button.setLocation(100, 85);
this.add(heading);
this.add(tfLable);
this.add(text);
this.add(Button);
}}
Run Code Online (Sandbox Code Playgroud) 关于该方法writeObject(Object obj)从ObjectOutputStream类
从Javadocs:
将指定的对象写入ObjectOutputStream。写入对象的类,类的签名以及该类及其所有超类型的非瞬态和非静态字段的值。
声明是什么
对象的类别
意思?这是否意味着将.class文件写入该文件或该类的源代码或仅写入该类的名称?