为什么Process.waitFor()永远不会返回?

我以下列方式从Java代码启动一个Windows进程(用C ++编写但我没有源代码): Process p1 = Runtime.getRuntime().exec(cmdAndParams); p1.waitFor(); 我的问题是waitFor()方法永远不会结束。 因此,我尝试在一个简单的shell中启动该过程,并在shell中使用许多打印正确结束(我猜是标准输出)。 因此,我决定创建并启动读取标准输出的线程,即使我现在不需要这些输出。 这解决了这个问题。 所以我的问题是以下问题:这个解决方案是“启动并等待具有输出的外部进程的Java标准”,还是意味着本机进程中存在某个问题? 如果存在这样的问题,那么C ++编程“错误”可能是问题的根源?

制作一个显示“请等待”JDialog的摇摆线程

问题是这样的: 我正在运行一个swing应用程序,在某个时刻,对话框需要插入用户名和密码并按“确定”。 我希望当用户按“确定”时,swing应用程序按此顺序执行: 打开“请等待”JDialog 进行一些操作(最终显示其他一些JDialog或JOptionPane) 当它完成操作时关闭“请等待”JDialog 这是我在okButtonActionPerformed()中编写的代码: private void okButtonActionPerformed(java.awt.event.ActionEvent evt) { //This class simply extends a JDialog and contains an image and a jlabel (Please wait) final WaitDialog waitDialog = new WaitDialog(new javax.swing.JFrame(), false); waitDialog.setVisible(true); … //Do some operation (eventually show other JDialogs or JOptionPanes) waitDialog.dispose() } 这段代码显然不起作用,因为当我在同一个线程中调用waitDialog时,它会阻塞所有代码直到我不关闭它。 所以我试着在另一个线程中运行它: private void okButtonActionPerformed(java.awt.event.ActionEvent evt) { […]

双重检查锁定物品

我正在阅读这篇关于“双重检查锁定”的文章,并且在文章的主题之外我想知道为什么在文章的某些方面作者使用下一个成语: 清单7.尝试解决乱序写入问题 public static Singleton getInstance() { if (instance == null) { synchronized(Singleton.class) { //1 Singleton inst = instance; //2 if (inst == null) { synchronized(Singleton.class) { //3 inst = new Singleton(); //4 } instance = inst; //5 } } } return instance; } 我的问题是:有没有理由将两次代码同步锁定同一个锁? 有这个任何目的吗? 提前谢谢了。

如何在java中进行连接池?

我试图理解connection pooling in java ,我在我的应用程序中使用jsp, servlet and tomcat 6 server 。 我在java class dbconnection.java编写了以下代码: 我在windows Xp OS中使用类型4 jdbc连接与oracle 10g EE import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class dbconnection { public Connection con = null; public Connection getConnection() throws Exception, SQLException { try { Class.forName(“oracle.jdbc.driver.OracleDriver”); con=DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:abc”,”abc”, “abc”); } catch(Exception e) { } return con; } […]

在运行时更改实体的表名?

这个表是按月生成的。 基本上所有月度表的表结构都是相同的。 因为使用不同的表名映射同一个实体需要做很多工作, 是否可以在运行时更改实体的表名,因为它们具有相同的表结构? @Entity @Table(name=”FOO_JAN2010″) // any other ways to generate this dynamically? public class FooJan2010Table { // if we can dynamically set the table name this can be simply named FooTable … } 如果没有,你能提出什么方法?

如何将一个流读入另一个流?

FileInputStream in = new FileInputStream(myFile); ByteArrayOutputStream out = new ByteArrayOutputStream(); 问题:如何以一种不使用我自己的字节缓冲区的手工循环的方式从in到out读取所有内容?

JavaFX最小化未修饰的阶段

我有一个未修饰的JavaFX Stage,以及我自己的最小化,最大化和关闭按钮。 但遗憾的是,与装饰行为相比,单击Windows 7中的任务栏图标不会自动最小化舞台。 有没有办法通过单击任务栏图标来最小化纯Java代码的未修饰阶段? 如果不是,我怎么能用JNA做到这一点? 编辑:好的,我一直在尝试用JNA来解决这个问题,但是在C / C ++ / JNA旁边做了很多,我设置它有点麻烦。 如果有人帮我把各个部分放在一起,我将不胜感激。 到目前为止,这是我的代码: public final class Utils { static { if (PlatformUtil.isWin7OrLater()) { Native.register(“shell32”); Native.register(“user32”); } } // Apparently, this is the event I am after public static final int WM_ACTIVATEAPP = 0x1C; public static void registerMinimizeHandler(Stage stage) { // Hacky way to get […]

在Dijkstra算法中使用哪种数据类型作为队列?

我正在尝试用Java实现Dijkstra的算法(自学)。 我使用维基百科提供的伪代码( 链接 )。 现在接近算法的末尾,我应该decrease-key v in Q; 。 我想我应该用BinaryHeap或类似的东西实现Q? 在这里使用什么是正确的(内置)数据类型? private void dijkstra(int source) { int[] dist = new int[this.adjacencyMatrix.length]; int[] previous = new int[this.adjacencyMatrix.length]; Queue q = new LinkedList(); for (int i = 0; i < this.adjacencyMatrix.length; i++) { dist[i] = this.INFINITY; previous[i] = this.UNDEFINED; q.add(i); } dist[source] = 0; while(!q.isEmpty()) { // […]

如何在hibernate实体中通过几列定义索引?

早上。 我需要在hibernate实体中添加索引。 据我所知,可以使用@Index注释来指定单独列的索引,但我需要一个实体的几个字段的索引。 我用谷歌搜索并找到了jboss注释@Table,它允许这样做(按照规范)。 但是(我不知道为什么)这个function不起作用。 可能是jboss版本低于必要,或者我可能不明白如何使用这个注释,但是…复杂索引没有创建。 为什么索引可能无法创建? jboss版本4.2.3.GA 实体示例: package somepackage; import org.hibernate.annotations.Index; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity @org.hibernate.annotations.Table(appliesTo = House.TABLE_NAME, indexes = { @Index(name = “IDX_XDN_DFN”, columnNames = {House.XDN, House.DFN} ) } ) public class House { public final static String TABLE_NAME = “house”; public final static String XDN = […]

Java的垃圾收集何时释放内存分配?

我用Java创建了一个对象,命名为FOO。 FOO包含大量数据..我不知道对于我已经拉入ram进行操作的十兆字节文本文件。(这只是一个例子) 这显然是一个巨大的空间,我想从内存中释放它。 我将FOO设置为NULL。 这会自动释放内存中的空间吗? 或者加载的文本文件占用的内存是否会自动垃圾收集?