EOFException в ObjectInputStream Только случается с Webstart не java (w) .exe? - PullRequest
0 голосов
/ 08 апреля 2010

Всем, кто знаком с различиями в запуске Webstart (javaws.exe) по сравнению с запуском приложения. используя java.exe или javaw.exe относительно потоков?

Это исключение, которое я ТОЛЬКО получаю при использовании Webstart:

java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at fasttools.jtools.dss.api.core.remoting.thinclient.RemoteSocketChannel.<init>(RemoteSocketChannel.java:77)

Так я настраиваю соединения с обеих сторон

//==Server side==
//Thread{ 
Socket mClientSocket = cServSock.accept();
new DssServant(mClientSocket).start();
//}

DssServant(Socket socket) throws DssException {
  try {
    OutputStream mOutputStream = new BufferedOutputStream( socket.getOutputStream() );
    cObjectOutputStream = new ObjectOutputStream(mOutputStream);
    cObjectOutputStream.flush(); //publish streamHeader
    InputStream mInputStream = new BufferedInputStream( socket.getInputStream() );
    cObjectInputStream = new ObjectInputStream(mInputStream);
    ..
  } catch (IOException e) {
    ..
  }
  ..
}

//==Client side==
public RemoteSocketChannel(String host, int port, IEventDispatcher eventSubscriptionHandler) throws DssException {
  cHost = host;
  port = (port == 0 ? DssServer.PORT : port);
  try {
    cSocket = new Socket(cHost, port);

    OutputStream mOutputStream = new BufferedOutputStream( cSocket.getOutputStream() );
    cObjectOut = new ObjectOutputStream(mOutputStream);
    cObjectOut.flush(); //publish streamHeader
    InputStream mInputStream = new BufferedInputStream( cSocket.getInputStream() );
    cObjectIn = new ObjectInputStream(mInputStream);

  } catch (IOException e) {
    ..
  }
  ..
}

[EDIT] Консоль Webstart говорит: Java Web Start 1.6.0_19 Использование JRE версии 1.6.0_19-b04 Java HotSpot (TM) Client VM

Сервер работает на том же 1.6u19

[EDIT] JNLP содержит:

<?xml version="1.0" encoding="utf-8"?>

<jnlp spec="1.0+" codebase="http://127.0.0.1:8080/">
  <information>
    <title>..</title>
    <vendor>..</vendor>
    <homepage href="http://127.0.0.1:8080/index.html"/>
    <description>..</description>
    <icon href="/jws/.."/>
    <icon kind="splash" href="/jws/...jpg"/>
    <offline-allowed/>
  </information>

  <security>
    <all-permissions/>
  </security>

  <resources>
   <j2se version="1.6+" initial-heap-size="128M" max-heap-size="512M"/>
   <jar href="http://127.0.0.1:8080/lib/xx.jar"/>
   <jar href="http://127.0.0.1:8080/lib/yy.jar"/>
  </resources>

  <application-desc main-class="..">
    <argument>-host</argument>     <argument>127.0.0.1</argument>
    <argument>-port</argument>     <argument>4359</argument>
    <argument>-httpport</argument> <argument>8080</argument>
  </application-desc>
</jnlp>

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 апреля 2010

О, МОЙ !!

Я выяснил, в чем проблема .. Файл JNLP, сгенерированный сервлетом, который был скопирован из существующей программы, предоставил параметры порта-nr Но номера портов не были исправлены .. Поставляемый порт был (существующим) защищенным сокетом .. мое приложение использовало незащищенный сокет !!

Какая ужасная ошибка

0 голосов
/ 11 апреля 2010

Я думаю, что вам, возможно, придется запросить разрешение в вашем файле JNLP.Попробуйте добавить

<security>
   <all-permissions/>
</security>

См. http://java.sun.com/javase/6/docs/technotes/guides/javaws/developersguide/syntax.html.

...