我试图做一个Java程序中,用户可以选择任何.class
或.jar
从他们的计算机文件。然后,我的程序将弹出一个JInternalFrame
带有a
JEditorPane
的控制台,以捕获用户程序中任何控制台输出。当用户程序关闭(调用System.exit(int status);
)时,我的程序不得与其一起关闭。我的程序可能还具有诸如立即停止用户程序的按钮之类的功能,以及其他IDE可能会停止的功能。我的程序不需要编译Java代码,只需运行.class
和.jar
文件即可。
我对该程序做了一个小型测试版本,其中我从一个软件包中获得了两个特定文件,并让用户单击了两个按钮之一,每个按钮代表两个程序之一。按下按钮将调用以下方法:
private void run(Class runnable)
{
java.lang.reflect.Method[] m = runnable.getMethods();
boolean hasMain = false;
for (int i = 0; i < m.length; i++)
{
if (m[i].getName().equals("main") && m[i].getParameterTypes()[0].isArray() && m[i].getParameterTypes()[0].getName().contains("java.lang.String"))
try
{
Object invoke = m[i].invoke(null, (Object)globalArgs);
hasMain = true;
hub.setExtendedState(Hub.ICONIFIED);
numPrograms++;
}
catch (Throwable t)
{
java.util.logging.Logger.getLogger(Hub.class.getName()).log(java.util.logging.Level.SEVERE, null, t);
javax.swing.JOptionPane.showMessageDialog(null, "Could not run " + runnable.getName(), "Error in invocation", javax.swing.JOptionPane.ERROR_MESSAGE);
}
finally
{
break;
}
}
if (!hasMain)
javax.swing.JOptionPane.showMessageDialog(null, runnable.getName()
+ " does not have a public static main method that\nreturns void and takes in an array of Strings",
"No main method", javax.swing.JOptionPane.ERROR_MESSAGE);
}
该方法成功调用了程序的main方法,并运行了该程序的副本。但是,当此集线器启动任何程序时,都会调用该System.exit(int status)
命令,该集线器也将关闭。另外,关于如何捕获控制台输出,我丝毫没有任何线索。
是否有人愿意分享任何经验或建议,以帮助我制定一个功能齐全的程序,可以…
.jar
文件中的方法可能具有多个类main(String[] args)
)System.exit(int status);
以便中心程序处理内部程序的退出
new java.io.PrintStream().println(Object o)
和类似的呼叫,并将其输出放在JEditorPane
JFrame
将内部程序使用的所有内容都转换为JInternalFrame
s并将它们放置在JDesktopPane
如果您不希望另一个程序(通过它的主要方法调用)能够关闭正在运行的JVM,那么就可以看到三个选项:
设置 SecurityManager 使其阻止System.exit
呼叫:
public class Test {
public static void main(String args[]) {
SecurityManager sm = System.getSecurityManager();
System.setSecurityManager(new SecurityManager() {
@Override
public void checkExit(int status) {
throw new SecurityException("Client program exited.");
}
});
try {
System.out.println("hello");
System.exit(0);
System.out.println("world");
} catch (SecurityException se) {
System.out.println(se.getMessage());
}
}
}
版画 :
hello
Client program exited.
这可能是最好的解决方案。这是应用程序服务器阻止任意servlet终止整个服务器的方式。
例如,在单独的JVM中运行其他程序 ProcessBuilder
import java.io.*;
public class Test {
public static void main(String args[]) throws IOException {
ProcessBuilder pb = new ProcessBuilder("java", "other.Program");
pb.redirectErrorStream();
Process p = pb.start();
InputStream is = p.getInputStream();
int ch;
while ((ch = is.read()) != -1)
System.out.print((char) ch);
is.close();
System.out.println("Client program done.");
}
}
不要禁止终止JVM,而要添加关闭钩子,以清理“集线器”并正常退出。(只有一次运行一个“外部”程序时,此选项才有意义。)
import java.io.*;
public class Test {
public static void main(String args[]) throws IOException {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.out.println("Uninitializing hub...");
System.out.println("Exiting gracefully.");
}
});
// Run client program
System.out.println("Running... running... running...");
System.exit(0);
}
}
印刷品:
Running... running... running...
Uninitializing hub...
Exiting gracefully.
我正在用SWING用JAVA开发一个图形用户界面应用程序。当我试图从Netbean IDE运行图形用户界面时,我遇到了一个问题,一旦图形用户界面运行,我就无法在界面上点击或做任何事情,换句话说,我无法与用户界面交互。例如,当我尝试按下一个按钮时,它什么也不做,就像冻结一样,但是它不会显示任何错误,你可以正常关闭它(x图标)。这是一张照片 有人知道如何解决这个问题吗? 我用的是Ubuntu 14.0
本章探讨如何将ES6的新语法,运用到编码实践之中,与传统的JavaScript语法结合在一起,写出合理的、易于阅读和维护的代码。 多家公司和组织已经公开了它们的风格规范,具体可参阅jscs.info,下面的内容主要参考了Airbnb的JavaScript风格规范。 块级作用域 (1)let取代var ES6提出了两个新的声明变量的命令:let和const。其中,let完全可以取代var,因为两者语
概述 “编程风格”(programming style)指的是编写代码的样式规则。不同的程序员,往往有不同的编程风格。 有人说,编译器的规范叫做“语法规则”(grammar),这是程序员必须遵守的;而编译器忽略的部分,就叫“编程风格”(programming style),这是程序员可以自由选择的。这种说法不完全正确,程序员固然可以自由选择编程风格,但是好的编程风格有助于写出质量更高、错误更少、更
问题内容: 我有一个Spring Boot应用程序,需要: 可作为战争部署在servlet容器中 可通过运行 我还希望能够通过右键单击main并运行它在IDE(Eclipse或IntelliJ IDEA社区)中运行此应用程序。 这是我pom.xml有趣的部分(请注意,我不是从spring-boot-starter-parent pom继承的): 这是我的 在IDE中运行main时,出现以下错误:
上周,我完成了一个测试应用程序的开发,并在所有模拟器中成功运行了它。今天我决定考虑发布这个应用程序,并使用了“Sent Android Build”。生成状态“成功”。然后尝试从命令行运行jar,得到: 所以试图逃离GUI并得到: Java版本: 我在Suse Linux 42.1 64b上使用Netbeans(这是新的)。 我在什么地方丢了一个图书馆吗?还是别的什么?
所谓"编程风格"(programming style),指的是编写代码的样式规则。不同的程序员,往往有不同的编程风格。 有人说,编译器的规范叫做"语法规则"(grammar),这是程序员必须遵守的;而编译器忽略的部分,就叫"编程风格"(programming style),这是程序员可以自由选择的。这种说法不完全正确,程序员固然可以自由选择编程风格,但是好的编程风格有助于写出质量更高、错误更少、更