【问题标题】:jar is not giving output on command prompt but working fine in eclipsejar 没有在命令提示符下提供输出,但在 eclipse 中工作正常
【发布时间】:2019-10-03 10:56:56
【问题描述】:

我做了一个调度器来安排一些任务

public class CronTriggerApp {
@SuppressWarnings("rawtypes")
public static void main(String[] args) throws Exception {

    System.out.println("****************************************************************************");
    System.out.println("*                                                                          *");
    System.out.println("* Note : Please Place Jar and Properties file in same Folder               *");
    System.out.println("*                                                                          *");
    System.out.println("****************************************************************************");

    Properties cronProp = Utility.getPropFileData();

    Set set = cronProp.entrySet();
    Iterator itr = set.iterator();
    while (itr.hasNext()) {
        Map.Entry entry = (Map.Entry) itr.next();
        String propKey = (String)entry.getKey();
        String propValue = (String)entry.getValue();
        String timeArr[] = propValue.split(":");
        String seconds = timeArr[2];
        String minuts = timeArr[1];
        String hour = timeArr[0];

        String cronExp = seconds.trim()+" "+minuts.trim()+" "+hour.trim()+" "+"? "+ "* "+ "MON-FRI";
        System.out.println("Is Valid Time Declaration: "+CronExpression.isValidExpression(cronExp));
        if(CronExpression.isValidExpression(cronExp)) {
            JobDataMap map = new JobDataMap();
            map.put("TAG", propKey);

            JobKey jobKey = new JobKey("jobObj"+propKey, "group"+propKey);
            JobDetail jobObj = JobBuilder.newJob(ScheduleTask.class).withIdentity(jobKey).setJobData(map).build();

            //CRON_SCHEDULE = 0 46 11,12 ? * MON-FRI
            Trigger trigger =   TriggerBuilder.newTrigger().withIdentity("TriggerName"+propKey, "group"+propKey)
                                .withSchedule(CronScheduleBuilder.cronSchedule(cronExp)).build();

            Scheduler scheduler = new StdSchedulerFactory().getScheduler();

            scheduler.start();
            scheduler.scheduleJob(jobObj, trigger);

        }else {
            System.out.println("Please Provide Time in HOUR:MINUTS:SECONDS[(0-23):(1-59):(1-59)] Formate for "+propKey);
        }

    }


}

当触发器执行下面的类将被调用

  public class ScheduleTask implements Job {


    @SuppressWarnings("static-access")
    public void execute(JobExecutionContext arg) throws JobExecutionException{

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        LocalDateTime now = LocalDateTime.now();
        System.out.println("Today's Date time : "+dtf.format(now));

        OutputStream stdin = null;  
        BufferedReader stdError = null;
        BufferedReader stdInput = null;

        JobDataMap jobDataObj = arg.getMergedJobDataMap();
        String tag = (String)jobDataObj.get("TAG");
        System.out.println(tag);

        //"OB" "Opening  Bell" "Sensex:45,778,Nifty:75,888"
        String headerAndmessage = SchedulerDto.pshNotification(tag);
        String argumentParam = tag+" "+headerAndmessage;

        Hashtable<String, String> hashTable = new Hashtable<String, String> ();
        hashTable.put("REQDATA",headerAndmessage);
        hashTable.put("ACTION","I");
        String uniqueId = SchedulerDto.reqRespLog(hashTable);


        File file = new File("");
        String filepath = file.getAbsolutePath()+file.separator+"IVLGenericAlerts.jar";
        String cmdwithArg =" java -jar " +filepath+" "+argumentParam ;
        System.out.println("command and jar path detail with database response: "+cmdwithArg);
        try {
            // suppose cmdWithArg  is java -jar D:\\user_workspace\\IVLGenericAlerts.jar 
            **Process process = Runtime.getRuntime().exec(cmdwithArg);**

            stdin = process.getOutputStream ();  

            stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));


            System.out.println("Here is the standard output of the command:");
            String lastLine = null;
            String currentLine = null;
            System.out.println("is output" + (currentLine = stdInput.readLine()) != null);
            while ((currentLine = stdInput.readLine()) != null) {
                lastLine = currentLine;
                System.out.println("abc");
                System.out.println(currentLine);
            }
            System.out.println("before xml");
            String xmlToJson = "<?xml version=\"1.0\" ?>"+lastLine;
            JSONObject xmlJSONObj = XML.toJSONObject(xmlToJson);
            String jsonPrettyPrintString = xmlJSONObj.toString();

            JSONObject jsonObject = new JSONObject(jsonPrettyPrintString);
            System.out.println(jsonObject);
            JSONObject enp = (JSONObject)jsonObject.get("Envelope");
            JSONObject Body = (JSONObject)enp.get("Body");
            JSONObject RESULT = (JSONObject)Body.get("RESULT");
            Object SUCCESS = RESULT.get("SUCCESS");
            Object RecipientId = RESULT.get("RecipientId");
            Object ORGANIZATION_ID = RESULT.get("SUCCESS");


            hashTable.put("ACTION","U");
            Map<String, String> hm = new HashMap<String, String>();
            hm.put("SUCCESS", SUCCESS.toString());
            hm.put("RecipientId", RecipientId.toString());
            hm.put("ORGANIZATION_ID", ORGANIZATION_ID.toString());
            hashTable.put("RESPDATA",hm.toString());
            hashTable.put("UNIQUEID", uniqueId);
            SchedulerDto.reqRespLog(hashTable);

            //System.out.println(hashTable.toString());


            System.out.println("Here is the standard error of the command (if any):\n");
            System.out.println("in error");
            stdError = new BufferedReader(new  InputStreamReader(process.getErrorStream()));
            while ((currentLine = stdError.readLine()) != null) {
                System.out.println(currentLine);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                stdin.close();
                stdError.close();
                stdInput.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }

    }

}

您可以在上面的类 String 变量 cmdWithArg 中看到。当我从 eclipse 运行它时,这将提供输出,但是当我从 eclipse 与其他目的地制作 jar 时,这将不会提供任何输出,我们正在使用我们的自定义 jar 来输出 IVLGenericAlerts.jar。希望你理解

【问题讨论】:

  • 你如何运行你的 jar 以及究竟发生了什么?
  • @Alex 在程序中我将使用 Runtime.getRuntime.exec(value of cmdArgs) 运行 jar,然后我将整个代码导出到其他目录并使用所有类制作 jar,而不是我使用jave -jar myexportedjar.jar
  • 程序是否退出?还是因为没有生成输出而一直挂起?

标签: java eclipse jar command-prompt executable-jar


【解决方案1】:

问题已解决,当我们在命令提示符下访问文件夹时,我们只需要添加转义双引号“”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 2018-03-21
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多