相关疑难解决方法(0)

如何中断无限循环

虽然我知道要问一点有点傻,但我还是想更多地询问它的技术观点.

无限循环的一个简单示例:

public class LoopInfinite {
    public static void main(String[] args) {
        for (;;) {
            System.out.println("Stack Overflow");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何从这个类的外部中断(停止)这个无限循环(例如,在继承的帮助下)?

java loops infinite-loop

24
推荐指数
4
解决办法
1万
查看次数

用Java杀死进程的正确方法

在Java中杀死进程的最佳方法是什么?

获取PID然后用它杀死它Runtime.exec()?

用destroyForcibly()吗?

这两种方法有什么区别,还有其他解决方案吗?

java kill process runtime.exec destroy

15
推荐指数
2
解决办法
2万
查看次数

在Java中,是否可以增加JVM的可用内存和/或杀死其他Java程序?

我对高级Java缺乏经验,所以请耐心等待.

我很好奇Java能够实现可能被称为"自主"的功能.假设我们有两个Java程序在运行.并且一个程序确定另一个程序正在占用内存,从而杀死该程序和/或为JVM分配更多内存.

我知道在Java中你可以看到可用的内存是什么(请参阅如何检查Java中的CPU和内存使用情况?),但是如果我们想深入挖掘怎么办?

谢谢.

java memory jvm process

14
推荐指数
2
解决办法
1107
查看次数

如何使用java关闭运行进程?

我正在使用java Runtime.exec()方法来执行bat文件,在bat文件中我已经编写了执行jar的代码.这个jar包含将无限时间汇集到rabbitmq队列的线程类,如果找到消息然后对其执行操作,则意味着这个过程将无限运行.我想使用java代码杀死这个进程,我也想知道这个方法能够执行在Linux Os上的脚本.

 **Used java code**

 String myCMD = "cmd.exe /C start c:\\elasticmgmtservice.bat";
 Runtime rt = Runtime.getRuntime();
 Process proc = rt.exec(myCMD);

**used batch file**

cd c: 
cd ElasticMgmtService\ 
java -jar ElasticIndexManagementService.jar config\ElasticIndexManagementService.xml
Run Code Online (Sandbox Code Playgroud)

请帮我解决问题.

java

8
推荐指数
1
解决办法
2万
查看次数

具有并发输入/输出流的Java进程

我正在尝试创建一种控制台/终端,允许用户输入一个字符串,然后将其转换为一个进程并打印出结果.就像一个普通的控制台.但我无法管理输入/输出流.我已经研究过这个帖子,但是这个解决方案很遗憾不适用于我的问题.

与"ipconfig"和"cmd.exe"等标准命令一起,我需要能够运行脚本并使用相同的输入流来传递一些参数,如果脚本要求输入的话.

例如,在运行脚本"python pyScript.py"之后,如果它要求它(例如:raw_input),我应该能够将更多输入传递给脚本,同时还打印脚本的输出.您期望终端的基本行为.

到目前为止我得到了什么:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

public class Console extends JFrame{

    JTextPane inPane, outPane;
    InputStream inStream, inErrStream;
    OutputStream outStream;

    public Console(){
        super("Console");
        setPreferredSize(new Dimension(500, 600));
        setLocationByPlatform(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // GUI
        outPane = new JTextPane();
        outPane.setEditable(false);
        outPane.setBackground(new Color(20, 20, 20));
        outPane.setForeground(Color.white);
        inPane = new JTextPane(); …
Run Code Online (Sandbox Code Playgroud)

java inputstream outputstream process

7
推荐指数
1
解决办法
4407
查看次数

如何终止使用ProcessBuilder正常创建的进程

我在Java应用程序中使用ProcessBuilder创建进程.创建的进程执行一些FFMPEG命令,这些命令实际上将RTSP流复制到指定的目标媒体文件中.

ProcessBuilder builder = new ProcessBuilder("ffmpeg", "-i", RTSP_URL, "-f", fileFormat, destFilePath);
Process processToExecute = builder.start();
Run Code Online (Sandbox Code Playgroud)

我想在完成执行之前关闭该进程.因此,如果我直接在Windows CMD中运行此FFMPEG命令,然后在5秒后按"CTRL + C",则进程get终止,状态为"2".我可以播放到目前为止创建的媒体文件.

所以,如果我在Java应用程序中执行相同的操作:

 process.destroy(); //I call this method after 5 sec
Run Code Online (Sandbox Code Playgroud)

我得到状态代码'1',这意味着异常终止.我通过以下方式获得状态:

 processToExecute.destroy();
 processToExecute.exitValue(); //This return me status '1'
Run Code Online (Sandbox Code Playgroud)

我无法播放媒体文件,我认为这是由于该过程的异常终止.

那么我如何终止使用ProcessBuilder创建的进程,就像我们在CMD中使用(CTRL + C)一样,以便我可以播放创建的媒体文件?

我想在Java应用程序中终止进程(使用ProcessBuilder创建),状态代码为'2',这是我在使用CMD终止进程时获得的.

编辑#01:---分享调查结果

因此,当我尝试在应用终止后删除该文件时,我收到以下错误:

The Action Can't be Performed Because File is Opened in FFMPEG.exe
Run Code Online (Sandbox Code Playgroud)

这意味着该进程不会终止它正在执行的命令.该命令仍然占用了这个文件,这就是为什么我无法播放它.当我打电话时,进程终止:

 processToExecute.destroy();
Run Code Online (Sandbox Code Playgroud)

但是,它正在执行的任务(即执行命令)仍然有效.奇怪!!!!

编辑#02:分享终极理由

实际上如果我在进程运行时直接在cmd中按'CTRL + C'或'q',那么它会成功终止进程,并且此进程在当前正在执行的进程列表中不再可见.

并以编程方式调用方法:

cmd> processToExecute.destroy();
Run Code Online (Sandbox Code Playgroud)

它终止了进程,但当我看到当前正在执行的进程列表时,我仍然可以在那里看到它们.

并存在相同的情况如果我尝试使用另一个CMD中的'taskkill'或'kill'命令终止此过程,方法是指定其进程异常终止的名称或pid.

PS我使用以下命令查看正在运行的进程:

tasklist
Run Code Online (Sandbox Code Playgroud)

因此,它证明了来自Application的destroy()方法和来自另一个CMD的'taskkill或kill'命令通常不会按"CTRL + C"和"q"来终止该过程.

java windows ffmpeg kill-process processbuilder

6
推荐指数
1
解决办法
7643
查看次数

在Java中杀死基于PID的进程

到目前为止我有这个:

public static void main(String[] args) {

    try {
        String line;
        Process p = Runtime.getRuntime().exec(
                System.getenv("windir") + "\\system32\\" + "tasklist.exe");

        BufferedReader input = new BufferedReader(new InputStreamReader(
                p.getInputStream()));

        while ((line = input.readLine()) != null) {
            System.out.println(line); // <-- Parse data here.
        }
        input.close();
    } catch (Exception err) {
        err.printStackTrace();
    }

    Scanner killer = new Scanner(System.in);

    int tokill;

    System.out.println("Enter PID to be killed: ");

    tokill = killer.nextInt();

}
Run Code Online (Sandbox Code Playgroud)

}

我希望能够根据用户输入的PID终止进程.我怎样才能做到这一点?(只需要在Windows上工作).*注意:必须能够杀死任何进程,inc.SYSTEM进程,所以如果使用taskkill.exe执行此操作,我猜测将需要-F标志?

所以,如果我有

Runtime.getRuntime().exec("taskkill /F /PID 827");
Run Code Online (Sandbox Code Playgroud)

如何用我的tokill变量替换"827"?

java windows process

4
推荐指数
2
解决办法
1万
查看次数

如何使用Java关闭命令提示符(如果已打开)

方案是我手动启动命令提示符。然后,我需要使用Java自动关闭命令提示符。我如何使用Java关闭命令提示符。任何人都可以帮助我

java

3
推荐指数
1
解决办法
2万
查看次数

Java任务经理

嗨,所以我是高中生,并且有一个与CS有关的项目.我正在尝试编写一个程序,在经过一段时间后关闭外部应用程序.那个时间部分很容易做,但现在问题是实际关闭问题.我环顾四周,找不到任何对我有用的东西,需要一些帮助.

这是我到目前为止所拥有的:

import java.util.concurrent.TimeUnit;
import javax.swing.JOptionPane;
public class TaskKiller {
    public static void main(String[] args) {
        JOptionPane pane = new JOptionPane();
        String userInput1 = JOptionPane.showInputDialog("Hours: "); 
        String userInput2 = JOptionPane.showInputDialog("Minutes: ");
        String userInput3 = JOptionPane.showInputDialog("Seconds: ");
        long inputHours = Long.parseLong(userInput1);
        long inputMinutes = Long.parseLong(userInput2);
        long inputSeconds = Long.parseLong(userInput3);
        long hours = inputHours * 3600000;
        long minutes = inputMinutes * 60000;
        long seconds = inputSeconds * 1000;
        long time = (hours + minutes) + seconds;
        try {
            TimeUnit.MILLISECONDS.sleep(time);
            System.exit(0);//was just an …
Run Code Online (Sandbox Code Playgroud)

java windows

2
推荐指数
1
解决办法
1732
查看次数

终止 java 子进程的理想方法是什么?process.destroyForcously() 不会终止我的进程

我有一个创建子进程的 Java Swing 应用程序。主 Swing 应用程序有一个停止按钮,点击该按钮后应立即终止子进程。“process.destroy()”不起作用。

Process myProcess = new ProcessBuilder("java", "-classpath", System.getProperty("java.class.path"), "MyClass.java");
try {
    myProcess.waitFor();
} 
catch (Exception e) {
    e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

...

myStopButton.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        myProcess.destroyForcibly(); 
        // myProcess is a really long and complex process. So I could not destroy that using process.destroyForcibly().
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 我可以向子进程发送一些信号以在内部调用 System.exit() 吗?
  2. 我可以使用“taskkill”仅终止子进程吗?

java swing process terminate

1
推荐指数
1
解决办法
4211
查看次数