Runtime.exec()。waitFor()不会等到进程完成

我有这个代码: File file = new File(path + “\\RunFromCode.bat”); file.createNewFile(); PrintWriter writer = new PrintWriter(file, “UTF-8”); for (int i = 0; i <= MAX; i++) { writer.println("@cd " + i); writer.println(NATIVE SYSTEM COMMANDS); // more things } writer.close(); Process p = Runtime.getRuntime().exec("cmd /c start " + path + "\\RunFromCode.bat"); p.waitFor(); file.delete(); 发生的事情是文件在实际执行之前被删除。 这是因为.bat文件只包含本机系统调用吗? 如何在执行.bat文件后进行删除? (我不知道.bat文件的输出是什么,因为它会动态更改)。

使用Java进行图像转码(JPEG到PNG)

在我的Java应用程序中,我想下载一个JPEG,将其传输到PNG并对结果字节执行某些操作。 我几乎可以肯定我记得有一个库存在这个,我不记得它的名字。

如何为tomcat应用程序增加Java堆空间

有很多问题要问这个或类似的问题。 它们都给出了必须执行的命令,我不明白的是我在哪里写这个命令。 我想永久增加我的tomcat应用程序的堆空间。 我读了这页http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-java-heap.html ,它在Tomcat部分下面说 停止Tomcat服务器,设置环境变量CATALINA_OPTS,然后重新启动Tomcat。 查看文件tomcat-install / bin / catalina.sh或catalina.bat以了解如何使用此变量。 例如, 设置CATALINA_OPTS = -Xms512m -Xmx512m(Windows,没有“”围绕值) export CATALINA_OPTS =“ – Xms512m -Xmx512m”(ksh / bash,“”围绕值) setenv CATALINA_OPTS“-Xms512m -Xmx512m”(tcsh / csh,“”围绕值) 所以我换了这条线 设置CATALINA_OPTS = 同 设置CATALINA_OPTS = -Xms512m -Xmx512m 但我仍然得到错误。 javax.servlet.ServletException:Servlet执行引发exception 根本原因 java.lang.OutOfMemoryError:Java堆空间java.lang.reflect.Array.multiNewArray(本机方法)java.lang.reflect.Array.newInstance(Array.java:90)nom.tam.util.ArrayFuncs.newInstance(ArrayFuncs。 java:1028)nom.tam.fits.ImageData.read(ImageData.java:259)nom.tam.fits.Fits.readHDU(Fits.java:573)controller.UploadServlet.retreiveFITSFileFields(UploadServlet.java:206)controller。 ScanServerFiles.doPost(ScanServerFiles.java:39)javax.servlet.http.HttpServlet.service(HttpServlet.java:637)javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Swing Worker中的优雅exception处理

我通过Swing Worker类在应用程序中使用线程。 它工作正常,但我对在try-catch块中显示错误消息对话框感到不舒服。 它可能会阻止应用程序吗? 这就是它现在的样子: SwingWorker worker = new SwingWorker() { // Executed in background thread public Void doInBackground() { try { DoFancyStuff(); } catch (Exception e) { e.printStackTrace(); String msg = String.format(“Unexpected problem: %s”, e .toString()); //TODO: executed in background thread and should be executed in EDT? JOptionPane.showMessageDialog(Utils.getActiveFrame(), msg, “Error”, JOptionPane.ERROR_MESSAGE, errorIcon); }//END: try-catch […]

如何在Dropwizard中进行资源的基本身份validation

我相信我有基本的身份validation工作,但我不知道如何保护资源,以便只有在用户登录时才能访问它们。 public class SimpleAuthenticator implements Authenticator { UserDAO userDao; public SimpleAuthenticator(UserDAO userDao) {this.userDao = userDao;} @Override public Optional authenticate(BasicCredentials credentials) throws AuthenticationException { User user = this.userDao.getUserByName(credentials.getUsername()); if (user!=null && user.getName().equalsIgnoreCase(credentials.getUsername()) && BCrypt.checkpw(credentials.getPassword(), user.getPwhash())) { return Optional.of(new User(credentials.getUsername())); } return Optional.absent(); } } 我的Signin资源是这样的: @Path(“/myapp”) @Produces(MediaType.APPLICATION_JSON) public class UserResource { @GET @Path(“/signin”) public User signin(@Auth […]

为什么在Java中的抽象类中存在私有访问修饰符,即使我们无法创建抽象类的实例?

我知道在abstract类中将方法声明为private不是一个好的编码实践。 即使我们无法创建abstract类的实例,为什么private访问修饰符在abstract类中可用,它在abstract类中的范围是什么? 在哪种情况下, abstract类中使用的private访问说明符? 看看这个代码,其中Vehicle类是抽象的, Car扩展了Vehicle。 package com.vehicle; abstract class Vehicle { // What is the scope of the private access modifier within an abstract class, even though method below cannot be accessed?? private void onLights(){ System.out.println(“Switch on Lights”); } public void startEngine(){ System.out.println(“Start Engine”); } } Within是创建Car类的相同包 package com.vehicle; /* * Car class extends […]

使用Selenium Webdrivers方法“browser.helperApps.neverAsk.saveToDisk”如何在点击链接时自动下载文件

在Java中使用Selenium Web驱动程序,我试图通过单击应用程序中的链接来下载文件。 即点击链接时,应该开始下载而不询问是否使用Firefox 12浏览器保存文件。 我正在使用browser.helperApps.neverAsk.saveToDisk方法。 实际结果: 当我运行此代码时,文件不会自动保存,而是要求保存或不保存。 我使用数据驱动的方法,我从Excel文件中获取元素。 有人可以帮帮我吗? 下面是使用browser.helperApps.neverAsk.saveToDisk代码 public class Driver { static WebDriver driver; public static void main(String[] args) { FirefoxProfile profile = new FirefoxProfile(); profile.setPreference(“browser.download.folderList”, 2); profile.setPreference(“browser.download.dir”, “d:\\”); profile.setPreference(“browser.helperApps.neverAsk.saveToDisk”, “application/vnd.ms-excel”); driver = new FirefoxDriver(profile); driver.get(“https://www.testapp.com”); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); TestRunner.run(suiteToRun()); } public static Test suiteToRun(){ TestSuite suite = new TestSuite(); System.out.println(“Login Class”); suite.addTestSuite(LoginLogout.class); […]

如何使用自定义ClassLoader?

大家好,感谢您的关注! 我有一个既容易又明显的问题,但我被卡住了。 我想提供动态创建的Java类,供第三方库通过自定义ClassLoader使用。 现在我的问题是:当我不直接加载这些类时,如何设置我的自定义ClassLoader来加载这些类? 我想当我使用我的ClassLoader加载某个类时,它就变成了这个类的ClassLoader,并且从该类加载的所有类都将通过我的ClassLoader引导。 我创建了一个自定义的ClassLoader,遵循以下官方教程: http : //java.sun.com/developer/onlineTraining/Security/Fundamentals/magercises/ClassLoader/help.html 。 public class DynamicClassloader extends ClassLoader { private Map<String, Class> classesMap = new HashMap<String, Class>(); public DynamicClassloader(ClassLoader parent) { // Also tried super(parent); super(sun.misc.Launcher.getLauncher().getClassLoader()); } // Adding dynamically created classes public void defineClass(String name, Class clazz) { classesMap.put(name, clazz); } @Override protected Class findClass(String name) throws […]

不使用任何外部函数生成随机数

这是我最近参加的一次访谈中提出的问题。 据我所知,两个数字之间的随机数可以生成如下 public static int rand(int low, int high) { return low + (int)(Math.random() * (high – low + 1)); } 但是在这里我使用Math.random()来生成0到1之间的随机数,并使用它来帮助我在低和高之间生成。 有没有其他方法可以在不使用外部function的情况下直接进行?

何时在java中使用multithreading中的volatile vs同步?

何时在multithreading中使用volatile关键字vs同步?