2012-01-21 18 views
0

私はJavaで作っているゲームに自動アップデータを作ろうとしていますが、動作しません。多くのデバッグでは、ゲームを開始しようとするときに停止する部分であることがわかりました。それは今まで何も何も約束しない。私の "ウェブサイト"を実行しているIISCサーバーはプライベートでテストのためだけであるため、あなたとはうまく動作しません。ソース:自動アップデータが動作しない

Downloader.java:

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.Scanner; 


public class Downloader { 
    public static void DownloadFile(String Indir,String Outdir,String Inname,String Outname) throws MalformedURLException, IOException{ 
     InputStream Input = new URL(Indir+"/"+Inname).openStream(); 
     if(new File(Outdir+"/"+Outname).exists()){ 
      new File(Outdir+"/"+Outname).delete(); 
     } 
     File f = new File(Outdir); 
     f.mkdirs(); 
     OutputStream Output = new FileOutputStream(Outdir+"/"+Outname); 
     Scanner scan = new Scanner(Input); 
     while(scan.hasNext()){ 
      byte[] bytes = scan.nextLine().getBytes(); 
      Output.write(bytes, 0, bytes.length); 
     } 
     Input.close(); 
     Output.close(); 
    } 
} 

Launcher.java:私はfinalyエラーをPROMTためにそれを得た

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.Scanner; 

import javax.swing.JOptionPane; 



public class Launcher{ 
    private static final String dir = "http://tv-w7:8000/"; 

    public static void main(String[] args){ 
     new Launcher(args); 
    } 
    public Launcher(String[] args){ 
     if(args.length==1){if(args[0].equals("f")){ 
      try { 
        JOptionPane.showMessageDialog(null, "game is getting cleaned, press OK to proseed"); 
        DownloadNewVersion(false,false); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 
      } 
     }else{ 
      try { 

       Download(); 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    public void Download() throws MalformedURLException, IOException{ 
     if(new File(System.getenv("APPDATA")+"/MS2-torsteinv/MS2-bin/no/torsteinv/MarsSettlement2/Client/Client.class").exists()){ 
      InputStream AVIS = new URL(dir+"MS2-dat/CD.txt").openStream(); 
      InputStream CVIS = new FileInputStream(System.getenv("APPDATA")+"/MS2-torsteinv/MS2-dat/CD.txt"); 

      Scanner CVS = new Scanner(CVIS); 
      Scanner AVS = new Scanner(AVIS); 

      String CV = CVS.nextLine(); 
      String AV = AVS.nextLine(); 

      CVIS.close(); 
      AVIS.close(); 

      if(!CV.equals(AV))DownloadNewVersion(true,true); 
      else start(); 
     }else{ 
      DownloadNewVersion(true,false); 
     } 
    } 
    private void DownloadNewVersion(boolean promt,boolean N) throws IOException { 
     if(promt && N)if(JOptionPane.showConfirmDialog(null,"A new verson is avalible. Download?")==1); 
     InputStream OS = Runtime.getRuntime().exec("java -classpath "+System.getenv("APPDATA")+"\\MS2-torsteinv").getInputStream(); 
     Scanner s = new Scanner(OS); 
     while(s.hasNext())System.out.println(s.nextLine()); 
     Scanner scan = new Scanner(new URL(dir+"MS2-register.txt").openStream()); 
     String CL = ""; 
     while(scan.hasNext()){ 
      CL = scan.nextLine(); 
      Downloader.DownloadFile(dir+CL.split(":")[0],System.getenv("APPDATA")+"/MS2-torsteinv/"+CL.split(":")[0],CL.split(":")[1],CL.split(":")[1]); 
     } 
     start(); 
    } 
    private void start(){ 

     try { 
      InputStream OS = Runtime.getRuntime().exec(new String[]{"java ",System.getenv("APPDATA")+"\\MS2-torsteinv\\MS2-bin\\no\\torsteinv\\MarsSettlement2\\Client\\Client.class"}).getErrorStream(); 
      Scanner s = new Scanner(OS); 
      while(s.hasNext())System.out.println(s.nextLine()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     System.exit(0); 
    } 
} 

java.lang.ClassFormatError: Illegal UTF8 string in constant pool in class file Client 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(Unknown Source) 
    at java.security.SecureClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.access$100(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Exception in thread "main" 
+0

あなたが標準出力に 'のRuntime.exec()'に渡している文字列を書いてみ、その後、/彼らは大丈夫だかどうかを確認するために、コマンドラインウィンドウに貼り付けるコピーします。 – millimoose

+0

[JWS](http://stackoverflow.com/tags/applet/info)は、他の多くのものの中で自動更新用に設計されています。なぜ実用的なソリューションを使用しないのですか? –

+0

JWSとは何ですか?私はそれを把握するまで私は戦う働くsoulutsionを使用しないでください。それが聞こえるかもしれないとしてpathreticとして。 –

答えて

0

ますので、おそらくですバイナリストリームを、プラットフォームのデフォルトエンコーディングでエンコードされた文字が含まれているかのように扱います:

byte[] bytes = scan.nextLine().getBytes(); 

これは、入力ストリームにテキスト行が含まれているとみなし、バイトを文字に変換します(すべてのバイトシーケンスが有効な文字を表していないため、デコードできます)。また、バイナリストリームに含まれる可能性のある改行文字の区切り文字を書くことも忘れてしまいます。

the Java IO tutorialでバイナリデータを読み書きする方法を学びます。

サイドノート:Java命名規則を遵守していないため、コードを読みにくいです。

+0

しかしそれはちょうどうまくダウンロードし、すべてのファイルはthweyがieであるはずです。養殖はありません。問題は、start()メソッドが実行されたときに停止し、プログラムが実行されることです。 –

+0

btw私のコードは読みにくいことがわかります。しかし、私は自分自身でそれをすべて手放すので、標準的な命名法と矛盾します。 –

0

execコールの終了には「Client.class」があります。それはちょうど "クライアント"であるべきですか?

ことは、これを試してみてください:

InputStream OS = Runtime.getRuntime().exec(new String[]{"java", "-classpath", System.getenv("APPDATA")+"\\MS2-torsteinv\\MS2-bin\\no\\torsteinv\\MarsSettlement2\\Client", "Client"}).getErrorStream(); 
+0

私は努力しましたが、私はまだ仕事をしています。パスとファイルが存在し、私はclasspathを常に設定しているのを見たことがあるので、javaはゲイである –

+0

@Torstein Vik:私の更新された答えを見てください。 –

+0

@TorsteinVik私は "java is gay"の意味を憤慨しています。あなたの質問にあるコードは 'Download'メソッドの' -classpath'パラメータだけを設定します。ここではどのクラスを実行するのかは分かりません。あなたのコードが失敗したと言う 'start'では、あなたはそれをしません。 – millimoose

関連する問題