让我们假设一个简单的方法,它抛出一IndexOutOfBoundsException
对无效的索引(2d数组).
我如何测试,所有坏指数组合都会引发异常?
(当然,如果一个电话抛出异常,这个测试将不会继续)
@Test(expected = Exception.class)
public void validateIndices(){
check(0,-1);
check(-1,0);
check(0,COLS + 1);
check(ROWS + 1, 0);
}
Run Code Online (Sandbox Code Playgroud)
是否有一种常用的方法来测试方法的参数变化?
Runtime objRuntime = Runtime.getRuntime();
String strBackupString = "mysqldump -u " + userName + " -p" + password + " " + dbName;
Process objProcess = objRuntime.exec(strBackupString);
Run Code Online (Sandbox Code Playgroud)
这用于备份数据库.但究竟发生了什么?任何人都可以让我解释一下,什么是目的Runtime
和Process
班?
这个类用于表现我们是否从命令提示符输入命令?然后,我应该通过什么objRuntime.exec()
,如果我想打开记事本?我们调用exec方法时是否执行命令?如果是,那么Process
这里的用途是什么?我真的无法理解这两个类.请让我明白.提前致谢 :)
如何编写带有java和pdfbox的pdf页面,通过写入我已知的像素的特定位置?
我尝试了这个,但它覆盖了:
PDDocument document = null;
try {
document = PDDocument.load(new File("/x/x/x/mypdf.pdf"));
PDPage page = (PDPage) document.getDocumentCatalog().getAllPages().get(0);
PDFont font = PDType1Font.HELVETICA_BOLD;
PDPageContentStream contentStream = new PDPageContentStream(document, page);
page.getContents().getStream();
contentStream.beginText();
contentStream.setFont(font, 12);
contentStream.moveTextPositionByAmount(100, 100);
contentStream.drawString("Hello");
contentStream.endText();
contentStream.close();
document.save("/x/x/x/mypdf.pdf");
document.close();
} catch (IOException e) {
e.printStackTrace();
} catch (COSVisitorException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我想用Windows压缩Windows(7)上的文件ZipOutputStream
.问题是文件名(以及文件文件Content)也包含希腊字符(" ??0000660040140521_a.txt
",Gamma和Pi).压缩我使用的文件的代码:
ZipOutputStream zipOs = new ZipOutputStream(
new FileOutputStream("c:\\temp\\test.zip"), Charset.forName("cp737")
);
File sourceFile = new File("C:/Path/To/File/??0000660040140521_b.txt");
String entryName = sourceFile.getName().replaceAll("\\\\", "/");
ZipEntry entry = new ZipEntry(entryName);
zipOs.putNextEntry(entry);
...
...
Run Code Online (Sandbox Code Playgroud)
但是在最后一行(putNextEntry
通话)我得到了IllegalArgumentException
:
java.lang.IllegalArgumentException: UNMAPPABLE[1]
at java.util.zip.ZipCoder.getBytes(ZipCoder.java:95)
at java.util.zip.ZipOutputStream.writeLOC(ZipOutputStream.java:407)
at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:221)
Run Code Online (Sandbox Code Playgroud)
我假设希腊语和UTF-8之间的字符映射一定有什么问题...什么是在文件名中用希腊字符压缩文件的正确方法?
编辑
如果我使用"utf-8"作为字符集,则可以创建zip文件,但压缩文件的名称是错误的:" ðôðƒ0000660040140521_a.txt
"(希腊字符丢失)
我有一块测试代码试图在通用情况下在后续调用中返回两个值,但在特定情况下只返回与该情况相关的值.代码看起来像:
when(mockObject.method(anyString())).thenReturn(string1, string2);
when(mockObject.method(eq("expectedInput1"))).thenReturn(string1);
when(mockObject.method(eq("expectedInput2"))).thenReturn(string2);
Run Code Online (Sandbox Code Playgroud)
预期的行为是,当调用mockObject.method("foo")
和mockObject.method("bar")
,string1
并且string2
应该分别返回时,但测试实际上是看到了两个响应string2
.这是一个错误Mockito
吗?或者我误解了Mockito
模式匹配.
我的假设是匹配的最后一个模式是返回的,但是当经历该过程时,是否分别Mockito
处理第一个thenReturn
块中的每个参数?有没有办法绕过这种行为?
当我在调用时注释掉第二个时,模拟的行为与预期一致,所以我假设有一些关于重叠匹配器行为的特定内容.
编辑:这是Mockito
版本1.9.5
我使用 aVBox
并为其添加了三个标签。标签之间的垂直间距是用setSpacing()
方法设置的。但它是一个固定值,比如20
。如果我将值更改为50
,空间将增加。但它是硬编码。
我想知道是否有任何可以使用的预定义方法,以便标签均匀分布(基于VBox
高度)。如果我调整窗口大小,标签(我的意思是标签之间的空间)应该调整,以便它们仍然均匀分布(任何两个标签之间的空间相同)。
作为VBox
被设定在的左侧BorderPane
,我想“ lab0 ”在“显示行1 ”,“ lab1中的在”“显示第5行”和“实验2 ”为“显示第9行(在对准方面)”。如果TextFields
添加更多,“ lab2 ”应该最后是“ Display Line X ”。
我的代码在这里...请标记。
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class MyJavaFx …
Run Code Online (Sandbox Code Playgroud) 我有一个案例,我想从.Net http客户端上传文本文件到InputStream格式的Java REST API.当我使用Form-Data Body中的File从Postman访问Java REST时,该文件在Java REST服务中得到了很好的接收.当我尝试从.Net客户端做同样的事情时,我得到了一些例外,如下所示.
我的.Net HTTP客户端代码如下,
var client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:8082/processes/view/createDocumentfromFile/851");
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("procId", "100");
client.DefaultRequestHeaders.Add("DocName", "ProphetWorkflow");
var content = new MultipartFormDataContent();
content.Add(new ByteArrayContent(File.ReadAllBytes(@"C:\Users\charan.ghate\Desktop\Calculation.txt")));
HttpResponseMessage messge = client.PostAsync(client.BaseAddress, content).Result;
if (messge.IsSuccessStatusCode)
{
string result = messge.Content.ReadAsStringAsync().Result;
lblResponse.Text = result;
}
Run Code Online (Sandbox Code Playgroud)
我的Java REST服务代码如下,
@POST
@Path("/createDocumentfromFile/{procId}")
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN })
@Produces({ MediaType.APPLICATION_JSON })
public Response createDocumentfromFile(@PathParam("procId") Long piOID, @HeaderParam("DocName") String modulename,
@Context HttpServletRequest request, @Context HttpServletResponse response,
@FormDataParam("file") InputStream uploadedInputStream) {
//
//Operation on …
Run Code Online (Sandbox Code Playgroud) 在将我的 JAX-RS 应用程序从 Jersey 迁移到 Quarkus/Resteasy 时,我发现方法发生了行为变化evaluatePreconditions(Date lastModified)
。事实上,在我的用例中,最后修改日期包含毫秒,不幸的是标题的日期格式If-Modified-Since
并且Last-Modified
不支持毫秒,正如我们在RFC 2616 中看到的那样。
Jersey 从提供的日期(正如我们在这里看到的)修剪毫秒数,而在 Resteasy 中,日期没有被修改,所以它实际上If-Modified-Since
以不同的精度(分别是秒和毫秒)比较日期(来自标题的日期和提供的日期)以不匹配而告终,因此是 HTTP 状态代码200
。
说明问题的代码:
@Path("/evaluatePreconditions")
public class EvaluatePreconditionsResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public Response findData(@Context Request request) {
final Data data = retrieveData();
final Date lastModified = Timestamp.valueOf(data.getLastModified());
final Response.ResponseBuilder responseBuilder =
request.evaluatePreconditions(lastModified);
if (responseBuilder == null) {
// Last modified date didn't match, send new content
return Response.ok(data.toString())
.lastModified(lastModified)
.build();
}
// Sending …
Run Code Online (Sandbox Code Playgroud) 我有JFormattedTextField
一个NumberFormat
与Locale.US.因此小数点分隔符是点,分组分隔符是逗号.
现在,我在此文本字段中键入字符串"1,23",并将焦点移动到另一个组件.我希望字符串消失(就像我输入"a"而不是"1,23"时那样),因为在使用Locale.US时它显然不是数字的有效表示.但相反,文本字段中的文本更改为"123".
这是因为NumberFormat
解析时使用的并不严格,只是忽略逗号.
问题:如何在这种情况下NumberFormat
抛出一个ParseException
,以便在将焦点移动到另一个组件后文本字段为空?
测试代码:
JDialog dialog = new JDialog();
JPanel panel = new JPanel(new BorderLayout());
dialog.getContentPane().add(panel);
NumberFormat nf = NumberFormat.getInstance(Locale.US);
JFormattedTextField textField = new JFormattedTextField(nf);
textField.setText("1,23");
panel.add(textField, BorderLayout.CENTER);
panel.add(new JButton("focus"), BorderLayout.EAST);
dialog.pack();
dialog.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
将焦点从文本字段移动到按钮,文本将更改为"123".
如果我在FRANCE/FRENCH语言环境中转换一个数字,它应该使用空格作为千位分隔符.如果我尝试用其他字符替换空格,则找不到任何空格.
String input = NumberFormat.getNumberInstance(Locale.FRANCE).format(123123123);
System.out.println("String after conversion in locale "+input);
input = input.replace(" ", ".");
System.out.println("After replace space with dot "+input);
Run Code Online (Sandbox Code Playgroud)
OUTPUT
String after conversion in locale 123 123 123
After replace space with dot 123 123 123
Run Code Online (Sandbox Code Playgroud)
因此,虽然分隔符看起来像空间,但它是不同的.什么是确切的字符?如何在input.replace()中指定该字符,以便我可以用点替换它?