Java线程不会在I / O操作上暂停

我的印象是,在Java中,线程会暂停并让其他线程有机会在阻塞I / O操作(如Socket.read()或DataGramsocket.receive())期间做一些工作。 出于某些原因,在我的multithreading网络应用程序中,对receive()的调用导致我所有其他线程都饿死(调用receive()的线程正在成为一个大老板,永远不会放弃控制,从而永远阻止!) 为什么会这样? 我曾经拥有相同的应用程序,但它不是UDP而是基于TCP。 Socket.read()总是暂停线程并允许其他人工作一段时间,如果它被阻塞太久了。 – 额外信息 – 我的自定义线程的TCP版本是这个代码: http : //www.dwgold.com/code/proxy/proxyThread.java.txt 我的新代码(UDP版本)几乎相同,但修改了一点使用UDP方法和样式。 然后我创建了其中两个线程,并在两个线程上调用start。 第一个线程总是阻塞,永远不会让另一个在UDP版本中工作。

JavaFX Canvas Double Buffering

我正在使用JavaFX在Java中复制经典游戏Pong。 我使用java.util.Timer,java.util.TimerTask进行游戏循环,使用JavaFX的Canvas进行渲染。 有没有办法为Canvas添加双缓冲,以便动画不会闪烁? 或者我应该采用不同的方法吗? 贝娄是代码。 我删除了它的一些部分,我认为这些部分无关紧要,因为代码长约200行。 Canvas canvas = new Canvas(stageW, stageH); GraphicsContext gc; public void start(Stage stage) throws Exception { Group root = new Group(); gc = canvas.getGraphicsContext2D(); Timer loop = new Timer(); root.getChildren().add(canvas); loop.schedule(new GameLoop(), 0, 1000 / 60); stage.setScene(new Scene(root,stageW, stageH)); stage.show(); } public class GameLoop extends TimerTask { @Override public void […]

将点分隔的字符串转换为JSON对象

所以我有一个点分隔的字符串,我试图在JAVA中转换为JSON对象。 结构如下。 Person.City.FirstNm.LastNm=xyz, Person.City.Address=abc. Person.City.firstNm.Salary=1000.24, Person.State.FirstNm.LastNm=xyz 等等。 生成的JSON应该是这样的。 请注意,值中可以有小数点。 { Person: { City: { firstNm: { LastNm:xyz, Salary:1000.24 }, Address: abc }, State: { FirstNm: { LastNm:xyz } } } } 我试图从字符串中创建一个Map,然后使用它来创建一个JSON字符串,我可以使用它作为一个对象,但没有运气。 任何帮助,将不胜感激。 谢谢

使用play-framework 2.5连接MySQL数据库

我正在尝试将MySQL数据库与Play-framework-Java 2.5.4 连接起来 。 我收到此错误 , either dataSource or dataSourceClassName is required 这些是我在App.conf文件中使用的连接代码, db { db.default.driver=com.mysql.jdbc.Driver db.default.url=”jdbc:mysql://localhost:3306/playdb” db.default.user=”root” db.default.password=”9413678957″ } 但它连接时给我以下错误: caused by: java.lang.IllegalArgumentException: either dataSource or dataSourceClassName is required at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:785) at play.api.db.HikariCPConfig.toHikariConfig(HikariCPModule.scala:141) at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:57) at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:54) at scala.util.Try$.apply(Try.scala:192) at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:54) at play.api.db.PooledDatabase.createDataSource(Databases.scala:199) at play.api.db.DefaultDatabase.dataSource$lzycompute(Databases.scala:123) at play.api.db.DefaultDatabase.dataSource(Databases.scala:121) at play.api.db.DefaultDatabase.getConnection(Databases.scala:142) 当我用相同的连接到mysql数据库时 (与在App.conf中相同) url(jdbc:mysql:// localhost:3306 / […]

Java – 中断线程?

我有一个关于在Java中断线程的问题。 说我有一个Runnable : public MyRunnable implements Runnable { public void run() { operationOne(); operationTwo(); operationThree(); } } 我想实现这样的事情: Thread t = new Thread(new MyRunnable()); t.run(); … // something happens // we now want to stop Thread t t.interrupt(); // MyRunnable receives an InterruptedException, right? … // t is has now been terminated. 我怎样才能在Java中实现它? 具体来说,我如何捕获MyRunnable的InterruptedException ?

如何将字符串转换为IJavaProject类型?

我正在开发一个插件。在这里我把项目作为文本框的输入,这是一个字符串,但它必须在继续之前转换为IJavaProject类型。 我怎样才能做到这一点 ? 谢谢

如何在不同的浏览器页面中管理多个帐户登录和注销?

我有一个基于App Engine(Java)的网站,需要用户使用Google帐户登录。 情况是: 用户Adam拥有多个帐户。 用户Adam使用帐户Adam1登录并在浏览器页面A中获取他的Adam1数据。 他点击了退出链接,但是在另一个标签页B中打开了它(当然是同一个浏览器) 他在浏览器页面B中使用另一个帐户Adam2登录,显示他的Adam2数据。 然后他返回浏览器页面A并对他的数据进行了一些更改然后发送到服务器,此时我的应用程序将识别当前用户是Adam2 ,并且将对Adam2进行更改,它与其状态不匹配当前页面A,我们的用户可能会感到困惑。 我想也许我可以在向服务器发出更改请求时附加userID参数,服务器端会将当前用户ID与此userID参数进行比较以处理更改请求或返回刷新命令以使过时页面成为如果ID不相同,则刷新到当前帐户。 处理这种情况的最佳做法是什么?

从Java程序获取局部变量的名称和类型

这是我正在尝试的代码: JavaCompiler compilerA = ToolProvider.getSystemJavaCompiler(); int resultA = compilerA.run(null,null,null,”/Users/a/Documents/Java/a.java”); System.out.println(“Compile result code = ” + resultA); File fileA = new File(“/Users/a/Documents/Java/a.class”); JavaCompiler compilerB = ToolProvider.getSystemJavaCompiler(); int resultB = compilerB.run(null,null,null,”/Users/a/Documents/Java/b.java”); System.out.println(“Compile result code = ” + resultB); File fileB = new File(“/Users/a/Documents/Java/b.class”); 这里我编译一个Java类,然后使用reflection来获取所有函数名,参数和返回类型。 但是,我不知道如何获取函数的局部变量的名称和返回类型。 我尝试查找字节码大纲,但它说它不适用于netbeans。 请帮帮我。

将项目添加到购物车时,playframework中的function测试失败

我写了一个function测试来检查将商品添加到购物车。对于能够将商品添加到购物车的用户,他需要登录。所以,我创建了一个登录用户的方法和另一种添加商品的方法。之前在测试中的addtocart方法之后,我正在检查购物车内容的大小。当我在开发模式下运行应用程序时,addtocartfunction没有任何问题(我也可以检查数据库 – 这是postgres而不是内存数据库)。addtocart在测试中失败了。 将项目添加到购物车的控制器方法 public static void addItemToCart(Long productId,Long cartId,String quantity) { Product product = Product.findById(productId); ShopCart cart = ShopCart.findById(cartId); int qty = Integer.parseInt(quantity); CartItem cartItem = new CartItem(product,qty); cart.addItem(cartItem); cart.save(); System.out.println(“Controller::addItemToCart()::cart id=”+cart.id+” has=”+cart.cartItems.size()+” items); } 我的测试方法是 @Test public void testUserCanAddItemsToCart() { Fixtures.loadModels(“data.yml”); User user = User.find(“byEmail”,”user@shop.com”).first(); loginAsCustomer(“user@shop.com”,”userpass”); ShopCart usercart = new ShopCart(user); usercart.save(); System.out.println(“BEFORE […]

有没有办法看到eclipse执行的命令?

这可能是一个愚蠢的问题,但我在使用java -jar myapp.jar从命令行运行Java应用程序时遇到问题。 当我使用菜单选择“作为Java应用程序运行”时,相同的应用程序在eclipse中运行完美 我可以以某种方式让eclipse在控制台中向我显示它正在执行的内容,以便我可以通过命令行复制它吗?