簡體   English   中英

跨方法使用變量/對象-Java

[英]Using variables/objects across methods - Java

因此,在下面的代碼中,我試圖讓對象“ reader”和“ writer”被我的某些方法識別,以便以后可以同時運行它們(我在想像使用線程) 。 所以這基本上是我的問題,是否可以通過其他方法來識別“讀取器”和“寫入器”對象?

 package com.Kaelinator; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.time.LocalDateTime; import java.time.temporal.ChronoField; public class ServerManager2 { static boolean Running = false; //static String command = "C:/Users/Kael/Desktop/minecraftserver/RUN.bat"; static String command = "C:/Users/Owner/Desktop/rekt/Run.bat"; static String shutDown = "C:/Windows/System32/shutdown.exe -r -t 0"; public static void main(String[] args) throws IOException { runServer(); while (Running) { chatChecker(); } Commands(); } public static void chatChecker() { LocalDateTime now = LocalDateTime.now(); int hour = now.get(ChronoField.HOUR_OF_DAY); int minute = now.get(ChronoField.MINUTE_OF_HOUR); int second = now.get(ChronoField.SECOND_OF_MINUTE); String hourSyntax = Integer.toString(hour); String minuteSyntax = Integer.toString(minute); String secondSyntax = Integer.toString(second); String chatChecker = "[" + hourSyntax + ":" + minuteSyntax + ":" + secondSyntax + "] [Server thread/INFO]: "; System.out.println(chatChecker); } public static void sleepThread(long time) { try { Thread.sleep(time * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } public static void runServer() throws IOException { Process process = Runtime.getRuntime().exec(command); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); process.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); } public static void readOutput() { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } public static void Commands() throws IOException { Running = true; try { sleepThread(3); writer.append("say SERVER STARTED"); writer.newLine(); writer.flush(); sleepThread(14100); writer.append("say restarting in 5 minutes"); writer.newLine(); writer.flush(); sleepThread(60); writer.append("say restarting in 4 minutes"); writer.newLine(); writer.flush(); sleepThread(60); writer.append("say restarting in 3 minutes"); writer.newLine(); writer.flush(); sleepThread(60); writer.append("say restarting in 2 minutes"); writer.newLine(); writer.flush(); sleepThread(60); writer.append("say restarting in 1 minutes"); writer.newLine(); writer.flush(); sleepThread(30); writer.append("say restarting in 30 seconds"); writer.newLine(); writer.flush(); sleepThread(20); writer.append("say restarting in 10 seconds"); writer.newLine(); writer.flush(); sleepThread(5); writer.append("say restarting in 5 seconds"); writer.newLine(); writer.flush(); sleepThread(1); writer.append("say restarting in 4 seconds"); writer.newLine(); writer.flush(); sleepThread(1); writer.append("say restarting in 3 seconds"); writer.newLine(); writer.flush(); sleepThread(1); writer.append("say restarting in 2 seconds"); writer.newLine(); writer.flush(); sleepThread(1); writer.append("say restarting in 1 second"); writer.newLine(); writer.flush(); writer.append("stop"); writer.close(); } catch (IOException e) { e.printStackTrace(); } } } 

盡管這不是推薦的面向對象的做法,但是一種實現所需方法的方法是將readerwriter設置為static字段,就像Running字段一樣。

編輯:

以下代碼編譯並運行。 我添加了兩個靜態字段,並在方法上添加了缺失的throws

package com.Kaelinator;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.time.LocalDateTime;
import java.time.temporal.ChronoField;

public class ServerManager2 {

  static BufferedWriter writer;
  static BufferedReader reader;
  static boolean Running = false;
  //static String command = "C:/Users/Kael/Desktop/minecraftserver/RUN.bat";
  static String command = "C:/Users/Owner/Desktop/rekt/Run.bat";
  static String shutDown = "C:/Windows/System32/shutdown.exe -r -t 0";



  public static void main(String[] args) throws IOException {
    runServer();
    while (Running) {
      chatChecker();
    }

    Commands();

  }




  public static void chatChecker() {
    LocalDateTime now = LocalDateTime.now();
    int hour = now.get(ChronoField.HOUR_OF_DAY);
    int minute = now.get(ChronoField.MINUTE_OF_HOUR);
    int second = now.get(ChronoField.SECOND_OF_MINUTE);

    String hourSyntax = Integer.toString(hour);
    String minuteSyntax = Integer.toString(minute);
    String secondSyntax = Integer.toString(second);

    String chatChecker = "[" + hourSyntax + ":" + minuteSyntax + ":" + secondSyntax +
            "] [Server thread/INFO]: ";
    System.out.println(chatChecker);
  }

  public static void sleepThread(long time) {

    try {
      Thread.sleep(time * 1000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

  }


  public static void runServer() throws IOException {
    Process process = Runtime.getRuntime().exec(command);
    writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
    process.getInputStream();

    reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
  }

  public static void readOutput() throws IOException {
    String line;
    while ((line = reader.readLine()) != null) {
      System.out.println(line);
    }
  }

  public static void Commands() throws IOException {

    Running = true;

    try {

      sleepThread(3);
      writer.append("say SERVER STARTED");
      writer.newLine();
      writer.flush();
      sleepThread(14100);
      writer.append("say restarting in 5 minutes");
      writer.newLine();
      writer.flush();
      sleepThread(60);
      writer.append("say restarting in 4 minutes");
      writer.newLine();
      writer.flush();
      sleepThread(60);
      writer.append("say restarting in 3 minutes");
      writer.newLine();
      writer.flush();
      sleepThread(60);
      writer.append("say restarting in 2 minutes");
      writer.newLine();
      writer.flush();
      sleepThread(60);
      writer.append("say restarting in 1 minutes");
      writer.newLine();
      writer.flush();
      sleepThread(30);
      writer.append("say restarting in 30 seconds");
      writer.newLine();
      writer.flush();
      sleepThread(20);
      writer.append("say restarting in 10 seconds");
      writer.newLine();
      writer.flush();
      sleepThread(5);
      writer.append("say restarting in 5 seconds");
      writer.newLine();
      writer.flush();
      sleepThread(1);
      writer.append("say restarting in 4 seconds");
      writer.newLine();
      writer.flush();
      sleepThread(1);
      writer.append("say restarting in 3 seconds");
      writer.newLine();
      writer.flush();
      sleepThread(1);
      writer.append("say restarting in 2 seconds");
      writer.newLine();
      writer.flush();
      sleepThread(1);
      writer.append("say restarting in 1 second");
      writer.newLine();
      writer.flush();
      writer.append("stop");
      writer.close();


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM